编程语言
首页 > 编程语言> > java-LMAX Disruptor事件中的类字段是否需要可变?

java-LMAX Disruptor事件中的类字段是否需要可变?

作者:互联网

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

为什么私有长值不被声明为易变的?

我问是因为,在Disruptor模式中,数据是在线程(生产者->消费者)之间共享的.

我的猜测:生产者线程和使用者线程之间已经(至少)有一个内存栅栏.

解决方法:

彼得的评论提供了一个很好的线索,实际上,是的,其中涉及记忆屏障.

您可以看到在Sequence类中使用了putOrderedLong()compareAndSet()等.这些都强制执行内存排序.

有关更多详细信息,请参见source code.

标签:disruptor-pattern,java
来源: https://codeday.me/bug/20191119/2034252.html