JAVA并发三大特性,原子性,可见性,有序性

yumo6663个月前 (03-08)技术文章81

JAVA并发三大特性

一、原子性

定义:操作是不可分割的最小单位。

作用:防止多线程同时修改共享变量导致的数据不一致问题。

实现机制

  • synchronized关键字:通过锁机制确保代码块或方法在同一时间只被一个线程执行,从而保证原子性。
  • Lock类(如ReentrantLock):提供比synchronized更灵活的锁定方式,同样保证原子性。
  • Atomic*类:提供不可变变量和原子操作方法,确保单个操作的原子性。

二、可见性

定义:一个线程对共享变量的修改能被其他所有线程立即看到。

作用:避免线程因缓存导致的数据不一致问题。

实现机制

  • volatile关键字:强制JVM确保变量的修改对所有线程可见,禁止JVM进行指令重排序优化。
  • synchronizedLock类:在获得锁和释放锁的过程中自动确保可见性。

三、有序性

定义:操作按预期顺序执行,避免乱序问题。

作用:防止多核处理器或编译器的指令重排序导致的操作顺序混乱。

实现机制

  • 内存屏障(Memory Barrier):通过插入内存屏障指令来确保特定操作的顺序性。例如,Thread#yield()Object.wait()等方法内部使用内存屏障。
  • synchronizedLock类:通过控制锁的获取和释放过程,隐式地保证一定的有序性。
  • Java内存模型中的happens-before规则:定义了不同操作之间的顺序关系,以避免数据 races。

总结

  • 原子性确保操作不可分割,防止中间状态问题。
  • 可见性确保变量变化对所有线程可见,避免缓存不一致。
  • 有序性确保操作按预期顺序执行,避免指令重排序带来的错误。


相关文章

详解java5、java6、java7、java8、java9新特性

1. 介绍JAVA作为使用的主力语言,掌握下其历史发展也是有必要的。看看从JAVA5开始到现在的JAVA9有哪些变化。借此机会,也可以看看哪些特性我们是已经用到的,哪些是还没有用到的。我们在IDEA里...