Java synchronized and volatile
- synchronized in java
- volatile in java
synchronized(同步) in java
单线程程序中,线程各自分开,独立执行,互不影响。但是在多线程程序中,多个线程可以主动使用和修改同一个数据,这将不可避免的造成麻烦,所以我们需要Thread synchronized (线程同步)
实现线程同步的一个方式就是使用互斥锁:在特定时间只有一个线程可以访问对象。
synchronized 关键字
synchronized 可以用来修饰方法,或者使用某个对象执行同步的代码块
public synchronized void doSomethings(){ |
当一个线程进入使用synchronized修饰的代码块,它会立即捕获对象的互斥锁,并且让其他线程等待
volatile in java
多线程程序中:
多线程应用程序运行时,不同线程可以缓存变量的值,即会存在线程的本地副本
在 Java 中,除了 long 和 double 之外的所有基本类型的读写操作都是原子的。
因为long 和double是64位的,分高32位和低32位,变更时需要分两次修改
在多线程中使用long或者double变量,可能出现第一个线程更改了前32位而没来得及更改后32位,第二个线程全部读取的情况。
使用volatile关键字
public class Demo{ |
volatile的作用:
- 变量x将始终进行原子方式的读取和写入
- x不会被线程缓存
参考链接:
- https://codegym.cc/groups/posts/110-thread-synchronization-the-synchronized-operator
- https://codegym.cc/groups/posts/111-managing-threads-the-volatile-keyword-and-the-yield-method
- 本文作者: Naskete
- 本文链接: https://Naskete.github.io/2022/03/28/essay/java_synchronized_and_volatile/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!