看了http://www.ibm.com/developerworks/java/library/j-praxis/pr50.html这篇文章。
它的意思就是:两个线程操作同一对象的字段的时候,每个线程会创建一个该字段的copy,当一个线程更新该字段以后,另一个线程读取该值的时候,有可能取出的还是老值。但我自己反复测试,都没有出现过这种情况,有点怀疑!请大家讨论一下。
它的意思就是:两个线程操作同一对象的字段的时候,每个线程会创建一个该字段的copy,当一个线程更新该字段以后,另一个线程读取该值的时候,有可能取出的还是老值。但我自己反复测试,都没有出现过这种情况,有点怀疑!请大家讨论一下。
解决方案 »
- 求一个判断的思路,麻烦高手指点,小弟先谢了。
- c#中sort()按什么来排序
- 请教一个button(SWT.CHECK)的问题
- 一个jdbc thin连接oracle的客户端程序是不是需要数据库连接池嘛?
- TIJ3中一句话不是很理解,哪位大侠能给个通俗的解释?
- JAVA的日期转换?
- 关于JAVA本身的类库的问题```
- 请问构造方法前有没有public有什么区别,感谢。
- 求助高手,java里面有没有像c语言里那样的广播?如果没有,有没有什么替代机制?请祥解!
- 例似移动的欠费催交系统需要什么样的软硬件环境,报价是多少?有没有详细方案。不能超过15万
- 关于this.setToolTipText("当前编号为"); 问题
- 如何把InputStream放到byte[] bytes里面?
建议你去看看如何用多线程处理售票的,你就知道synchronized的用处了.
=========================================================================================================================
JVM规范中说的类似,某个线程改变了他所拥有的拷贝的变量值后,会刷新到主存储区域中,至于什么时候刷由JVM控制,在这个刷新的过程中可能会有数据被改变等并发的问题,不过这和你提供链接中的文章中的例子不是一回事。
不过这段话和synchronized没有什么直接的关系,synchronized是控制线程对对象的访问,为他所保护的对象维护一个锁
volatile是指线程访问一个变量时每次都到主存储区去取最新的值
如果你不需要数据的同步方法的话,可以将字段定义为 volatile,这样的话多线程会去内存地址重新取值,而不是操作对象的拷贝
需要价格锁锁了{进来买票 A}开锁这个时候其他人进不去,只能有一个人在买A,所以A不会被卖出两次
这里不是锁不锁的问题,而是如何测试证明“每个线程会创建一个该字段的copy”!
说的不是数据库,而是java语言。对象在内存中存取的时候,是不是有个所谓的线程拷贝??如果有的话,那单线程是不是也有个拷贝
建议你去看看如何用多线程处理售票的,你就知道synchronized的用处了.
2、以atomic的方式进行long、double的指定详细可以自己去看看Java内存模型
lz是不是两个实现一起弄,所以看不出效果。