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