disruptor(二)
来源:互联网 发布:算法复杂性分析 编辑:程序博客网 时间:2024/06/14 23:14
private String id;//id
private String name;
private double price;//金额
private AtomicInteger count = new AtomicInteger();
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public AtomicInteger getCount() {
return count;
}
public void setCount(AtomicInteger count) {
this.count = count;
}
}
public class TradeHandler implements EventHandler<Trade>,WorkHandler<Trade>{
@Override
public void onEvent(Trade arg0) throws Exception {
//这里做具体的消费逻辑
arg0.setId(UUID.randomUUID().toString());
System.out.println(arg0.getId()+" 价格="+arg0.getPrice());
}
@Override
public void onEvent(Trade arg0, long arg1, boolean arg2) throws Exception {
this.onEvent(arg0);
}
}
public class Main {
public static void main(String[] args) throws Exception, ExecutionException {
int BUFFER_SIZE = 1024;
int THREAD_NUMBERS = 4;
final RingBuffer<Trade> ringBuffer = RingBuffer.createSingleProducer(new EventFactory<Trade>() {
@Override
public Trade newInstance() {
return new Trade();
}
}, BUFFER_SIZE,new YieldingWaitStrategy());
//创建线程池
ExecutorService executos = Executors.newFixedThreadPool(THREAD_NUMBERS);
//创建SequenceBarrier
SequenceBarrier sequenceBarrier = ringBuffer.newBarrier();
//创建消息处理器
BatchEventProcessor<Trade> transProcessor = new BatchEventProcessor<Trade>(ringBuffer, sequenceBarrier, new TradeHandler());
//把消费者信息引入到生产端
ringBuffer.addGatingSequences(transProcessor.getSequence());
//把消息处理器提交到线程池
executos.submit(transProcessor);
Future<?> future = executos.submit(new Callable<Void>() {
@Override
public Void call() throws Exception {
// TODO Auto-generated method stub
long seq;
for(int i=0;i<10;i++){
seq = ringBuffer.next();
ringBuffer.get(seq).setPrice(Math.random()*9999);
ringBuffer.publish(seq);
}
return null;
}
});
future.get();
Thread.sleep(1000);
transProcessor.halt();
executos.shutdown();
}
}
public class Main2 {
public static void main(String[] args) throws Exception {
int BUFFER_SIZE = 1024;
int THREAD_NUMBERS = 4;
final RingBuffer<Trade> ringBuffer = RingBuffer.createSingleProducer(new EventFactory<Trade>() {
@Override
public Trade newInstance() {
return new Trade();
}
}, BUFFER_SIZE,new YieldingWaitStrategy());
//创建线程池
ExecutorService executos = Executors.newFixedThreadPool(THREAD_NUMBERS);
//创建SequenceBarrier
SequenceBarrier sequenceBarrier = ringBuffer.newBarrier();
WorkHandler<Trade> handler = new TradeHandler();
WorkerPool<Trade> workerPool = new WorkerPool<>(ringBuffer, sequenceBarrier, new IgnoreExceptionHandler(),handler);
workerPool.start(executos);
for(int i=0;i<8;i++){
long seq = ringBuffer.next();
ringBuffer.get(seq).setPrice(Math.random()*9999);
ringBuffer.publish(seq);
}
Thread.sleep(1000);
workerPool.halt();
executos.shutdown();
}
}
- disruptor 二
- disruptor(二)
- Disruptor学习总结(二):Disruptor分析
- Disruptor笔记(二)-测试
- Disruptor笔记(二)-测试
- Disruptor介绍(二)
- disruptor实操作手册(二)
- Disruptor
- disruptor
- disruptor
- disruptor
- disruptor
- disruptor
- Disruptor
- Disruptor
- Disruptor
- Disruptor
- Disruptor
- 为什么axios请求接口会发起两次请求(OPTIONS 和POST或者GET)
- Tomcat源码解析(8)
- 二分
- 每日一题(30)—— 局部变量能否和全局变量重名?
- 高数基础8-多元微分学
- disruptor(二)
- 解决Spring Boot 拦截器注入service为空的问题
- 基于XILINX FPGA的卷积神经网络(二)
- Spring-Cloud学习之路-Eureka服务注册
- 异常
- JAVA集合概念
- vue.js axios 的使用
- Java之枚举的原理
- 归并排序