【发布时间】:2017-02-18 23:41:25
【问题描述】:
为什么java.util.concurrent.LinkedBlockingQueue 的head 和tail 引用不是volatile?
一个线程中head 或tail 的任何更改可能对另一个线程不可见,那么这会导致问题吗?
【问题讨论】:
-
有趣的问题。尤其是当人们开始阅读该类的源代码并发现它包含一些关于锁定的注释掉的内容时;和锁定方法......没有使用?!
-
它使用锁来提供线程安全。
-
从源码看,head 和 tail 是“transient”,不同于“non-volatile”。
-
transient和volatile不相关。transient用于序列化。 -
@JohnVint 是的,虽然它们的意思相同(两个词都是同义词,意思是“只持续很短的时间”),但它们没有任何关系。
标签: java concurrency