欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

volatile与synchronized

时间:2023-06-29

volatile 关键字: 当多个线程进行操作共享数据时,可以保证内存中的数据是可见的;相较于 synchronized 是一种较为轻量级的同步策略 volatile 不具备"互斥性" volatile 不能保证变量的"原子性"

可见性: 可见性是一种复杂的属性,因为可见性中的错误总是会违背我们的直觉。通常,我们无法确保执行读操作的线程能适时地看到其他线程写入的值,有时甚至是根本不可能的事情。为了 确保多个线程之间对内存写入操作的可见性,必须使用同步机制。

用volatile修饰的变量,就会具有可 见性。volatile修饰的变量不允许线程内部缓存和重排序,即直接修改内存。所以对其他线 程是可见的。但是这里需要注意一个问题,volatile只能让被他修饰内容具有可见性,但不 能保证它具有原子性。比如 volatile int a = 0;之后有一个操作 a++;这个变量a具 有可见性,但是a++ 依然是一个非原子操作,也就是这个操作同样存在线程安全问题

结果不定

Volatie声明变量后对所有线程可见,通常适用于共享变量

*volatile并不能保证多个线程共同修改running变量时所带来的不一致问题,也就是说volatile 不能替代synchronized

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。