Java 多线程并发编程中,常用到两个关键字:synchronized
和 volatile
,synchronized 是重量级锁,而 volatile 可以理解为轻量级的 synchronized ,但并不保证线程安全。
volatile 在并发环境中保证了共享变量的 可见性,即当一个线程修改一个共享变量时,另一个线程能读到这个修改的值。volatile 变量修饰符使用适当的话,相对于 synchronized 的使用和执行成本更低,因为它不会引起线程上下文的切换和调度。
Java 多线程并发编程中,常用到两个关键字:synchronized
和 volatile
,synchronized 是重量级锁,而 volatile 可以理解为轻量级的 synchronized ,但并不保证线程安全。
volatile 在并发环境中保证了共享变量的 可见性,即当一个线程修改一个共享变量时,另一个线程能读到这个修改的值。volatile 变量修饰符使用适当的话,相对于 synchronized 的使用和执行成本更低,因为它不会引起线程上下文的切换和调度。
JDK 1.5 新增了 ReentrantLock 类,可以实现线程之间的同步互斥,相比 synchronized ,在扩展功能上更加强大,在使用上更加灵活。
ReentrantLock 还具有嗅探锁定、多路分支通知等功能。
非线程安全 是在多个线程对同一个对象中的实例变量进行并发访问,读取的数据不一致,即数据被意外修改过,出现了脏读。
synchronized 是 Java 中的关键字,是一种同步锁,可以修改方法、代码块、静态方法、类,使多线程以排队方式进行同步处理。