如果一个javabean会被并发访问,比如读写其定义的属性字段,那么为了确保线程读取字段的值是最新的,是不是意味着这个类所有的字段都要用volatile关键字修饰?虽然我觉得应该如此,但是在本地写测试代码似乎没有测试出反例,即:不加volatile,也第一时间就读取到了最新值,这是怎么回事呢?是否和JVM的window版本、linux版本有关?又获取与硬件CPU有关?
解决方案 »
- java与mysql连接,mysql-connector-java-5.1.12-bin.jar要与mysql版本一致吗?
- java.io.NotSerializableException: org.apache.log4j.Logger
- 带动态参数的链接 这里如何转换 为el表达式
- 关于用批处理来启动jar文件,批处理中带有参数!!请知道的指点!
- 请教一个关于拼RGB颜色算法的思路--在线等
- 一个关于编译的问题 急!
- Java如何读取、处理BMP位图文件?!
- 发一个最近用swing做的流程图形化定义工具,顺便再问个问题
- synchronized问题?
- JavaFx之显示一个国际象棋棋盘
- java怎么定义接收用户输入4个整数,不是4个整数就显示报错
- httpclient设置代理爬取国外网站失败,Software caused connection abort: recv failed
看看这篇文章吧
比如 volatile int i; i++这种操作就不是原子性的 需要注意处理 所以volatile修饰并不是就保证并发安全 还要具体看场景
volatile变量可见性是通过写立即提交到内存和通知失效实现的 有序性是通过内存屏障禁止重排序实现的以下摘自深入理解java虚拟机
在不符合一下两条规则的运算场景中,仍然要通过加锁来保证原子性
1 运算结果并不依赖变量的当前值,或者能够确保只有单一线程修改变量的值。
2 变量不需要与其他的状态变量共同参与不变约束。如有不对之处多多指教