实现互斥锁是多线程编程中常见的问题,Java中提供了synchronized关键字来实现互斥锁功能。
1. synchronized基本用法
1.1 使用在方法上
在方法上使用synchronized关键字,可以实现对当前对象的方法加锁,使得同一时间只能有一个线程访问该方法。
public class SynchronizedExample {
public synchronized void doSomething(){
// 执行需要互斥的代码
}
}
1.2 使用在代码块上
使用synchronized关键字还可以使用在代码块上,可以实现对当前对象或指定对象加锁。
public class SynchronizedExample {
public void doSomething(){
synchronized(this){
// 执行需要互斥的代码
}
}
public void doSomething2(Object lock){
synchronized(lock){
// 执行需要互斥的代码
}
}
}
2. 示例说明
2.1 示例一
下面的示例演示了如何使用synchronized关键字实现对多线程操作的代码块进行互斥的效果:
public class SynchronizedExample {
private int count = 0;
private Object lock = new Object();
public void add(){
synchronized(lock){
count++;
}
}
public int getCount(){
synchronized(lock){
return count;
}
}
}
在上面的代码中,我们使用了一个对象lock作为锁来控制对count变量的访问。通过在add()和getCount()方法中使用synchronized关键字,实现了对count变量的访问加互斥锁的效果。
2.2 示例二
下面的示例演示了如何使用synchronized关键字实现对多线程操作的静态方法进行互斥的效果:
public class SynchronizedExample {
private static int count = 0;
public synchronized static void add(){
count++;
}
public synchronized static int getCount(){
return count;
}
}
在上面的代码中,我们使用synchronized关键字在静态方法add()和getCount()中进行加锁,来实现对静态变量count的互斥访问。因为静态变量是属于类的,所以加锁的对象是类本身。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java使用synchronized实现互斥锁功能示例 - Python技术站