最近在看关于线程方面的书,里边涉及到 volatile 修饰符。小弟有一点困惑,忘大家不吝赐教。
在<<java并发编程实践>> 这本书里边,有一小结谈论到该修饰符。里边指出该修饰符可以确保线程的可见性,但是不能确保操作的原子性。
也就是说在非原子性操作该变量的时候,还是会出现问题。书里说的是 "最低安全性" (类似数据库 read_uncommited) 。
以上是线程安全的,因为操作时原子的
我想问的问题是 既然i 已经满足线程的可见性,那通过同步的set方法,get方法在不使用同步的情况在不同步的情况先是否可以获得最新的值(i++ 是非原子操作)
get不使用同步可以获得最新的值。
但是代码放到具体的环境中
比如http://sprite311.iteye.com/blog/2036800
就不能保证业务逻辑都是对的了
concurrent包是用来解决复杂的并发问题的包