LMAX Disruptor事件中的类字段是否需要易变?

时间:2016-01-10 15:05:09

标签: java disruptor-pattern

LMAX Disruptor"入门" ...

的示例代码
public class LongEvent
{
    private long value;

    public void set(long value)
    {
        this.value = value;
    }
}

参考:https://github.com/LMAX-Exchange/disruptor/wiki/Getting-Started

为什么不将private long value声明为volatile

我问,因为隐含于Disruptor模式,数据在线程(生产者 - >消费者)之间共享。

我的猜测:生产者和消费者线程之间已经存在(至少)一个内存栅栏。

1 个答案:

答案 0 :(得分:3)

彼得的评论提供了一个很好的线索,事实上,是的,还有记忆围栏。

你可以在Sequence类中看到putOrderedLong()compareAndSet()等等。每个都强制执行内存排序。

有关详细信息,请参阅source code