更新时间:2023-05-18 来源:黑马程序员 浏览量:

synchronized和volatile都可以用于多线程编程,但它们的作用不同。
volatile变量用于保证线程之间对变量的可见性,即当一个线程修改了一个volatile变量时,其他线程能够立即看到这个变量的最新值。volatile关键字通常用于修饰被多个线程访问的共享变量,防止出现线程之间的数据不一致问题。
synchronized则是用于实现线程间的互斥同步,即同一时间只允许一个线程访问某个代码块或方法。通过 synchronized关键字的作用,可以保证在同一时刻只有一个线程执行被锁定的代码块或方法,从而避免出现多个线程同时修改共享变量造成的数据不一致问题。
下面是一个简单的代码演示:
public class SynchronizedVsVolatileDemo {
private volatile int volatileCounter = 0;
private int synchronizedCounter = 0;
public void incrementVolatileCounter() {
volatileCounter++;
}
public synchronized void incrementSynchronizedCounter() {
synchronizedCounter++;
}
public int getVolatileCounter() {
return volatileCounter;
}
public int getSynchronizedCounter() {
return synchronizedCounter;
}
}在上面的代码中,我们定义了两个计数器变量 volatileCounter 和 synchronizedCounter,分别用 volatile 和 synchronized 进行修饰。incrementVolatileCounter 方法使用 volatile 关键字对 volatileCounter 进行递增操作,incrementSynchronizedCounter 方法使用 synchronized 关键字对 synchronizedCounter 进行递增操作。getVolatileCounter 和 getSynchronizedCounter 方法分别用于获取这两个计数器的值。
在多线程环境下,如果我们同时启动多个线程去调用这两个递增方法,可以观察到下面的现象:
·对于volatileCounter变量,由于它被volatile修饰,因此在递增操作后,其他线程能够立即看到这个变量的最新值,从而保证了数据的可见性。
·对于synchronizedCounter变量,由于它被synchronized修饰,因此在递增操作时,只有一个线程能够获取到锁并执行递增操作,其他线程需要等待锁被释放后才能执行递增操作,从而保证了线程间的互斥同步。
综上所述,volatile和synchronized在多线程编程中有着不同的作用,需要根据实际需求选择使用。
全国13城校区全覆盖|黑马程序员AI大模型开发(Python),就近学习、全国就业
2026-04-08黑马程序员AI大模型开发(Python)|大厂共建+实战赋能,学完即具备企业项目能力
2026-04-08黑马程序员AI大模型开发(Python)|5阶段体系化教学,从入门到精通全覆盖
2026-04-08黑马程序员AI大模型开发(Python)|培养企业应用型人才,适配行业核心需求
2026-04-08黑马程序员AI智能应用开发|上市品牌背书,大厂联合研发,打造AI复合型人才
2026-04-08全国13城校区全覆盖|黑马程序员AI智能应用开发,就近学、就近就业
2026-04-08