Java LinkedBlockingQueue中的非易失性头部和尾部引用

use*_*749 4 java concurrency

为什么java.util.concurrent.LinkedBlockingQueue有一个headtail参考作为非volatile

一个线程中headtail在一个线程中的任何更改可能对另一个线程不可见,因此会导致问题吗?

Joh*_*int 8

headtail将要被看守putLocktakeLock.只要您进行适当的同步,就不需要将字段声明为volatile.

所以,回答你的问题.volatile如果它们正确同步(它们是),则不需要这些字段.

如果您发现有一部分代码存在疑问,请告诉我,否则我找不到任何他们需要易变的原因.