前情提要:disruptor是一个环状队列,并且环内的对象在启动的时候就已经进行了创建,这也是它快的原因之一
以下是短暂的代码时间:
public class MyEvent {
private Tag tag;
private ClassA a;
private ClassB b;
}
下面的init写法就是问题所在了,我的环内有两个对象,由于我post的数据有两种:tag为a是对象a有值,tag为b时,对象b有值。(两个对象不时存在)
按照一般的理解,每次传进来的对象只有一种,应该不会有问题的。但是!!!由于disruptor的event对象是预先创建的,就是说你每一次使用就都是向环内的对象赋值,然后并没有清空对应数据。假设我的环只有10个格子,我先写了十次A。第十一次输入一个B就出现问题了,这是会导致的结果是event 里的tag为b,但getA() 和 getB() 都不为空。
例子情况比较极端,知道一下是这个意思就好了。
public class DisruptorHandler {
private int bufferSize = 1024;
private AtomicLong keys = new AtomicLong(0);
p