欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

volatitle详解

程序员文章站 2022-05-28 18:05:39
...
学习多线程并发,要着重“外炼互斥,内修可见,内功有序”,这是掌握多线程/学习多线程和并发技术的重要知识点。

volatitle

关键字volatitle 的主要作用是让其他线程可以看到最新的值,volatile 只能修饰变量。它包含三个特征:

 - 可见性:B线程能马上看到A线程更改的数据
 - 原子性:在32位系统中,针对未使用volatile声明的longdouble数据类型没有实现写原子性,如果想实现,则声明变量是添加volatile,而在64位系统中,原子性取决于具体的实现,在X86架构64为JDK版本中,写doublelong是原子的。另外,针对volatile声明的 int I 变量进行 i++操作时是非原子的
 - 禁止代码重排序

synchronized

关键字synchronized 的主要作用是保证同一时刻,只有一个线程可以执行某一个方法,或是某一个代码块,syncronized可以修饰方法及代码块。随着JDK的版本升级synchronized关键字在执行效率上得到很大提升。它包含三个特征。
 - 可见性:synchronized 具有可见性
 - 原子性: 使用sync 实现了同步,同步实现了原子性,保证被同步的代码段在同一时间只有一个线程在执行
 - 禁止代码重排序:sync禁止代码重排序

使用场景

关键字volatil和synchronized的使用场景总结如下:
 - 当想实现一个变量的值被更改时,让其他线程能取到最新的值时,就要对变量使用volatil
 - 当多个线程对同一个对象中的同一个实例变量进行操作时,为了避免出现非线程安全的问题就要使用synchronized

相关标签: jvm volatile