专业的JAVA编程教程与资源

网站首页 > java教程 正文

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

temp10 2025-03-13 20:32:25 java教程 8 ℃ 0 评论

JAVA并发三大特性

一、原子性

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

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

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

实现机制

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

二、可见性

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

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

实现机制

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

三、有序性

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

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

实现机制

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

总结

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


Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表