[英]Java volatile variable, multi threading
我有一个多线程的应用程序。 当多个线程共享该变量时,我注意到一些现有代码使用volatile。 为什么不只在使用变量时在方法中使用同步,将变量定义为volatile有什么好处?
声明一个易失的Java变量意味着:
换句话说,同步和易失性之间的主要区别是:
更多信息是: http : //javamex.com/tutorials/synchronization_volatile.shtml
与使用同步相比,volatile更简单,更快捷。
因为它比较简单,所以用途有限,但是如果您只需要volatile,那么为什么要使用同步。 ;)
从这里拍摄:
原始变量可能被声明为volatile(而您不能在已同步的原始变量上进行同步);
对volatile变量的访问永远不会被阻塞:我们只做简单的读取或写入操作,因此与同步块不同,我们永远不会保持任何锁。
因为访问易失性变量永远不会持有锁,所以它不适用于我们希望以原子操作方式进行读取-更新-写入的情况(除非我们准备“错过更新”);
作为对象引用的volatile变量可能为null(因为您实际上是在引用而不是实际对象上进行同步)。
简而言之,至少在线程之间共享一个变量(状态)时,才应使用volatile
。 与synchronized
相比,它的成本less intuitive
也less intuitive
。 有多个变量使状态易变是一个问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.