Java多线程并发编程Synchronized关键字
什么是Synchronized关键字?
在Java多线程并发编程中,Synchronized关键字可以用来保证多个线程在访问共享资源时的同步性。它可以实现线程安全的同步操作。
Synchronized关键字的用法
Synchronized关键字可以加在方法和代码块上面。
方法上的Synchronized关键字
首先,可以在方法上使用Synchronized关键字。被Synchronized关键字修饰的方法称为同步方法。
例如:
public synchronized void testMethod() {
// 具体的操作
}
当一个线程访问该方法时,其他线程必须等待当前线程执行完该方法才能够进入该方法。
代码块上的Synchronized关键字
其次,可以在代码块上使用Synchronized关键字。
例如:
public void testMethod() {
synchronized (this) {
// 具体的操作
}
}
当一个线程访问该代码块时,其他线程必须等待当前线程执行完该代码块才能够进入该代码块。
Synchronized关键字的原理
在Java中,每个对象都有一个锁(也叫做监视器锁或者内部锁)。当一个线程访问一个被Synchronized修饰的代码块时,该线程会获取该对象的锁,其他线程需要等待当前线程释放锁才能够获得该对象的锁并访问该代码块。
Synchronized关键字的示例
示例一:同步方法
public class SynchronizedDemo {
private int count = 0;
public synchronized void add() {
count++;
}
public int getCount() {
return count;
}
}
在这个示例中,add方法被Synchronized修饰,count变量是一个共享变量。当多个线程同时访问该对象的add方法时,只有一个线程可以获得该方法的锁,其他线程需要等待当前线程释放锁才能够获得该方法的锁并访问该方法。
示例二:同步代码块
public class SynchronizedDemo {
private int count = 0;
public void add() {
synchronized (this) {
count++;
}
}
public int getCount() {
return count;
}
}
在这个示例中,add方法的代码块被Synchronized修饰,count变量是一个共享变量。当多个线程同时访问该对象的add方法时,只有一个线程可以获得该方法的锁,其他线程需要等待当前线程释放锁才能够获得该方法的锁并访问该方法中的Synchronized代码块。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java多线程并发编程 Synchronized关键字 - Python技术站