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

yumo6665个月前 (03-08)技术文章127

JAVA并发三大特性

一、原子性

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

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

实现机制

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

二、可见性

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

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

实现机制

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

三、有序性

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

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

实现机制

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

总结

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


相关文章

我的编程梦----聊聊Java特性

上一篇文章聊了学习编程可能会遇到的心里障碍和为什么学习Java,看了网友们的回复小编很激动,我会积极听取网友们的留言,在我以后的文章中改进。现在说Java语言的特性,每一种语言都有自己的特性,Java...

java面向对象特性,抽象,封装,继承,多态

1. 抽象(Abstraction)定义: 抽象是指将复杂的事物进行简化,通过隐藏实现细节,只暴露接口或核心功能。它是面向对象编程中的一种机制,允许我们定义“抽象类”和“接口”,从而强制子类实现某些方...