Java volatile变量,多线程 [英] Java volatile variable, multi threading

查看:56
本文介绍了Java volatile变量,多线程的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个多线程应用程序.当多个线程共享该变量时,我注意到一些现有代码使用了volatile.为什么不只在使用变量时在方法中使用同步,将变量定义为volatile有什么好处?

I have an application which are multi threading. I notice some existing code use volatile when the variable is shared by several threads. Why not just use synchronized in the method when variable is used, what's the benefits to define variable as volatile?

推荐答案

声明易失性Java变量意味着:

Declaring a volatile Java variable means:

  • 此变量的值永远不会在线程本地缓存:所有读取和写入操作都将直接进入主内存";
  • 对变量的访问就好像它被包含在一个同步块中,并在其自身上同步一样.

换句话说,synchronized和volatile之间的主要区别是:

In other words, the main differences between synchronized and volatile are:

  • 原始变量可能被声明为volatile(而您不能在已同步的原始变量上进行同步);
  • 对volatile变量的访问永远不会阻塞:我们只做简单的读取或写入操作,因此与同步块不同,我们永远不会保持任何锁;
  • 因为访问volatile变量永远不会持有锁,所以它不适用于我们希望以原子操作读取-更新-写入的情况(除非我们准备错过更新");
  • 作为对象引用的volatile变量可能为null(因为您实际上是在引用上进行同步,而不是在实际对象上进行同步).

更多信息是: http://javamex.com/tutorials/synchronization_volatile.shtml

这篇关于Java volatile变量,多线程的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆