我使用java.util.concurrent.ConcurrentLinkedQueue
对象在线程之间传递数据。
我应该声明我的参考资料volatile
吗?
答案 0 :(得分:4)
简而言之,没有。
队列变量包含的值是对队列的引用。除非你像myQueue = otherQueue;
那样重新分配队列,否则这个值不会改变。如果您正在做的就是创建队列,那就是把事情放进去并把事情搞砸了,那么线程是否有缓存值并不重要,因为value(对队列的引用)永远不会改变。
最好将所有变量设为最终,除非你需要它不是最终的。
答案 1 :(得分:1)
不,因为您总是使用相同的队列。易失性意味着内存中变量的值对于每个处理器总是相同的。请注意,即使将变量声明为volatile,也不会同步存储在寄存器中的变量。
答案 2 :(得分:1)
如果你可以宣告它是最终的,那么宣布它是最终的。如果你不能,宣布它是不稳定的。
声明它的volatile不会对Queue的内部结构产生影响。它只在分配a new ConcurrentLinkedQueue()