给出一个从BlockingQueue迁移到LMAXDisruptor的示例代码
时间: 2023-03-02 20:18:12 浏览: 92
以下是一个从BlockingQueue迁移到LMAXDisruptor的示例代码:
BlockingQueue代码:
```
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
public class BlockingQueueExample {
public static void main(String[] args) {
BlockingQueue<String> queue = new LinkedBlockingQueue<>();
new Thread(() -> {
while (true) {
try {
String msg = queue.take();
System.out.println("消费者收到消息:" + msg);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
new Thread(() -> {
for (int i = 0; i < 100; i++) {
try {
queue.put("生产者生产消息:" + i);
System.out.println("生产者生产消息:" + i);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
}
```
LMAXDisruptor代码:
```
import com.lmax.disruptor.RingBuffer;
import com.lmax.disruptor.dsl.Disruptor;
import com.lmax.disruptor.util.DaemonThreadFactory;
import java.nio.ByteBuffer;
public class LMAXDisruptorExample {
public static void main(String[] args) {
Disruptor<StringEvent> disruptor = new Disruptor<>(StringEvent::new, 1024, DaemonThreadFactory.INSTANCE);
disruptor.handleEventsWith((event, sequence, endOfBatch) ->
System.out.println("消费者收到消息:" + event.getValue()));
disruptor.start();
RingBuffer<StringEvent> ringBuffer = disruptor.getRingBuffer();
ByteBuffer bb = ByteBuffer.allocate(8);
for (long l = 0; l < 100; l++) {
bb.putLong(0, l);
ringBuffer.publishEvent((event, sequence, buffer) -> event.setValue(buffer.getLong(0)), bb);
System.out.println("生产者生产消息:" + l);
}
}
static class StringEvent {
private String value;
public String getValue() {
return value;
}
public void setValue(long value) {
this.value = String.valueOf(value);
}
}
}
```
注意:LMAXDisruptor是一个高性能的并发框架,需要充