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

yumo6662个月前 (03-08)技术文章58

JAVA并发三大特性

一、原子性

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

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

实现机制

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

二、可见性

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

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

实现机制

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

三、有序性

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

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

实现机制

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

总结

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


相关文章

Java 9 的5个新特性,你知道几个?

http://codecloud.net/java-9-new-feature-6243.html推荐理由今天我们已经对Java 9中所期待的特性有了一个很清晰的图景。如果Java 8可以被描述为主...

java面向对象三大特性:封装、继承、多态——举例说明(转载)

概念封装:封装就是将客观的事物抽象成类,类中存在属于这个类的属性和方法。继承:继承就是把父对象继承过来,这样子类就存在了父类的操作方法,java是单继承,就是只能继承一个父对象。多态:多态就是程序中允...

「软帝学院」什么是java?学Java能做什么?Java有什么特性?

什么是java?学Java能做什么?Java有什么特性?Java 技术既是一种高级的面向对象的编程语言,也是一个平台。Java 技术基于 Java 虚拟机(Java virtual machine,J...

Java8新特性Lambda表达式详解

Lambda表达式介绍Lambda 是一个匿名函数,可以把 Lambda 表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。使用它可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使...