如何使volatile count操作成为线程安全的

时间:2015-09-14 10:43:08

标签: java multithreading volatile

我一直在经历JCIP,作者在那里说..

  

线程限制的特例适用于volatile变量。只要确保volatile变量只从单个线程写入,就可以安全地对共享的volatile变量执行读 - 修改 - 写操作

例如count ++被认为是复合操作(读取值,向其中添加一个,并更新值)并将count指定为volatile不会使此操作成为原子操作,因此这里不保证线程安全!我对吗 ??但是这里作者说我们可以修复它,如果我们确保volatile变量只是从一个线程写的。 我没理解这一点。请提供说明。

1 个答案:

答案 0 :(得分:0)

我猜你和我的here有类似的怀疑。虽然只有一个线程对volatile变量执行读 - 修改 - 写操作,但读取线程确实可以读取"临时"变量的值;但这并不意味着该程序不是线程安全的。它读取"临时"因为写作线程还没有把它写入内存。换句话说,写作和阅读线程是"看到变量的相同状态" - 他们仍然完美同步。