- 浏览: 728360 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (419)
- 杂软粉墨 (2)
- 创意灵感 (3)
- 经验记录 (137)
- 开源轨迹 (2)
- sip-communicator (2)
- 闲侃杂谈 (8)
- 问题交流 (24)
- 概念模式 (32)
- 难点备案 (5)
- JwChat (1)
- 中国象棋 (1)
- 教育探索 (6)
- 英语研究 (58)
- 星际争霸 (1)
- 电信知识 (1)
- 软件架构 (3)
- 哲学探索 (26)
- 算法灵魂 (8)
- 近视探索 (6)
- 数学数学 (3)
- 牛角钻尖 (23)
- 至强文言 (3)
- 数据结构 (1)
- 宇宙物理 (2)
- 网络架构 (3)
- 游戏领域 (4)
- 图形处理 (2)
- 修炼之路 (8)
- 读书天地 (20)
- 编解乱码 (2)
- 概念探索 (8)
- 格物致知 (1)
- 其它语言 (1)
- 测试领域 (3)
- 文化风流 (1)
- JQuery (1)
- 網頁領域 (1)
- Unix/Linux (1)
- Inside JVM (1)
- 异常分析 (1)
最新评论
-
suyujie:
引用
HTML <a> 标签灰显禁用 -
suyujie:
HTML <a> 标签灰显禁用 -
suyujie:
HTML <a> 标签灰显禁用 -
suyujie:
HTML <a> 标签灰显禁用 -
iamzhoug37:
您能说一下"局部变量不受文本顺序限制" 是 ...
声明前为什么能赋值却不能输出,都是使用
http://aleung.blogbus.com/logs/32090434.html
在Java内存模型中,有main memory,每个线程也有自己的memory
(例如寄存器)。为了性能,一个线程会在自己的memory中保持要访问的变量的副本。这样就会出现同一个变量在某个瞬间,在一个线程的memory中的值可能与另外一个线程memory中的值,或者main
memory中的值不一致的情况。
一个变量声明为volatile,就意味着这个变量是随时会被其他线程修改的,因此不能将它cache在线程memory中。以下例子展现了volatile的作用:
public class StoppableTask extends Thread { private volatile boolean pleaseStop; public void run() { while (!pleaseStop) { // do some stuff... } } public void tellMeToStop() { pleaseStop = true; } }
假如pleaseStop没有被声明为volatile,线程执行run的时候检查的是自己的副本,就不能及时得知其他线程已经调用tellMeToStop()修改了pleaseStop的值。
Volatile一般情况下不能代替synchronized,因为volatile不能保证操作的原子性,即使只是i++,实际上也是由多个原子操作组成:read
i; inc; write i,假如多个线程同时执行i++,volatile只能保证他们操作的i是同一块内存,但依然可能出现写入脏数据的情况。如果配合Java
5增加的atomic wrapper classes,对它们的increase之类的操作就不需要synchronized。
Reference:
- http://www.javamex.com/tutorials/synchronization_volatile.shtml
- http://www.javamex.com/tutorials/synchronization_volatile_java_5.shtml
- http://www.ibm.com/developerworks/cn/java/j-jtp06197.html
评论
2 楼
dracularking
2010-10-29
这里的private是成员级别的访问控制符,是只有在同类中能够访问,而不是当前线程组吧
1 楼
笑我痴狂
2010-10-08
有个疑问:
怎么是private , 共享的话 不应该是私有成员 ,也不说一定不可以 , private的话就只有当前线程组里的线程成员可以访问 望指教
private volatile boolean pleaseStop;
怎么是private , 共享的话 不应该是私有成员 ,也不说一定不可以 , private的话就只有当前线程组里的线程成员可以访问 望指教
发表评论
-
关于方法访问控制符protected
2012-11-29 10:38 1198http://bbs.csdn.net/topics/3902 ... -
一个基本问题关于引用的
2012-05-15 10:20 1077问: int a = 1; Integer b = new ... -
我對面向對象和過程的理解。
2012-05-02 08:30 1011我的一些理解。 面向过程,是对客观现象的描述,感觉是有一个上 ... -
stack and heap
2012-01-13 23:17 1011我觉得是根据应用方式 和本身特性 才将内存分区的,目的是提 ... -
program experience conclusion
2011-07-11 15:35 10141. check parameters for validit ... -
PreparedStatement's possible designated parameter
2011-04-29 13:45 939though it's nearly impossible t ... -
clean Log4j
2011-04-12 11:19 1025import org.apache.log4j.BasicCo ... -
about abstract class
2011-04-02 10:34 809yes, we do know abstract class ... -
cvs operations on linux
2011-03-25 09:40 958http://www.linuxhowtos.org/Syst ... -
regex to exchange two parts
2011-03-24 17:09 1010public class Test { public ... -
About the database locking
2011-03-09 11:02 903http://en.wikipedia.org/wiki/Lo ... -
how to send soap message in java
2011-03-08 10:29 1854import java.io.BufferedReader; ... -
About ShutDownDemo
2011-03-07 15:02 921public class ShutdownDemo { p ... -
How do you know if an explicit object casting is needed
2011-02-24 16:33 1121通俗来讲,不可能将一只是猫的动物强转为狗 再说Graphic ... -
有关MimeUtility
2011-02-24 13:11 3298import java.io.UnsupportedEncod ... -
C#连接sql server 2008的一件2事
2011-02-24 09:01 2111once upon a time, i came upon o ... -
Shadowing, Overriding, Hiding and Obscuring
2011-02-22 15:15 1097当子类属性与父类属性重叠时 这种叫法上是shadowi ... -
JAXP usage
2011-02-16 16:07 1052import java.io.ByteArrayInputSt ... -
运行一个类,如果classpath中路径带空格就加双引号
2011-02-11 11:25 2762注意是这样加: java -cp .;"d:\my ... -
关于ClassPath中的current directory
2011-01-28 16:40 1115Given: 1. package com.company. ...
相关推荐
java volatile 关键字实战java volatile 关键字实战java volatile 关键字实战java volatile 关键字实战java volatile 关键字实战java volatile 关键字实战java volatile 关键字实战java volatile 关键字实战java ...
java volatile 关键字 学习
在本文里我们给大家分享的是关于java volatile关键字作用及使用场景的相关知识点内容,需要的朋友们学习下。
Java并发编程:volatile关键字解析
主要讲述java线程volatile关键字
主要介绍了java volatile关键字使用方法及注意事项的相关资料,当一个变量被声明为 volatile 后,java 内存模型确保所有使用该变量的线程能看到相同的、一致的值。,需要的朋友可以参考下
volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。这篇文章主要介绍了Java中volatile关键字的作用与用法详解的相关资料,需要的朋友可以参考下
volatile是java中的关键词之一,这篇文章主要给大家介绍了关于Java中volatile关键字的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
java里的volatile关键字详解
volatile这个关键字,不仅仅在Java语言中有,在很多语言中都有的,而且其用法和语义也都是不尽相同的。这篇文章主要介绍了Java中的volatile关键字,需要的朋友可以参考下
java语言的volatile教程,java语言的volatile关键字到底怎么用
java里的volatile关键字详解.pdf
多方面解读Java中的volatile关键字.rar
主要为大家解析了java中volatile关键字,经常有人把volatile关键字和synchronized或者lock混淆,本文就为大家好好区分,感兴趣的小伙伴们可以参考一下
本文详细解读一下volatile关键字如何保证变量在多线程之间的可见性,对Java中volatile关键字实现原理感兴趣的朋友一起通过本文学习吧
volatile是比synchronized关键字更轻量级的同步机制,访问volatile变量时不会执行加锁操作,因此不会使执行线程阻塞。 volatile保证可见性和禁止指令重排序,底层是通过“内存屏障”来实现,但不保证原子性。 写入...
深入了解java并发的volatile关键字的底层设计原理.docx
主要介绍了java volatile关键字的含义详解的相关资料,需要的朋友可以参考下
主要介绍了Java Volatile关键字同步机制详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
主要介绍了Java线程编程中的volatile关键字的作用,针对其禁止进行指令重排序和读写内存方面着重讲解,需要的朋友可以参考下