disruptor(三)
来源:互联网 发布:淘宝店招设计效果图 编辑:程序博客网 时间:2024/06/06 10:40
public class Trade { 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 TradePublisher implements Runnable { Disruptor<Trade> disruptor; private CountDownLatch latch; private static int LOOP=1; public TradePublisher(Disruptor<Trade> disruptor, CountDownLatch latch) { this.disruptor = disruptor; this.latch = latch; } @Override public void run() { TradeEventTranslator tradeEventTranslator = new TradeEventTranslator(); for(int i=0;i<LOOP;i++){ disruptor.publishEvent(tradeEventTranslator); } latch.countDown(); }}class TradeEventTranslator implements EventTranslator<Trade>{ private Random random = new Random(); @Override public void translateTo(Trade trade, long l) { this.generateTrade(trade); } private Trade generateTrade(Trade event){ event.setPrice(random.nextDouble()*9999); return event; }}public class Handler1 implements EventHandler<Trade>,WorkHandler<Trade>{ @Override public void onEvent(Trade trade) throws Exception { System.out.println("handler1:set Name"); trade.setName("h1"); Thread.sleep(1000); } @Override public void onEvent(Trade trade, long l, boolean b) throws Exception { this.onEvent(trade); }}public class Handler2 implements EventHandler<Trade>,WorkHandler<Trade> { @Override public void onEvent(Trade trade, long l, boolean b) throws Exception { System.out.println("handler2:set price"); trade.setPrice(17.0); Thread.sleep(1000); } @Override public void onEvent(Trade trade) throws Exception { this.onEvent(trade); }}public class Handler3 implements EventHandler<Trade>,WorkHandler<Trade> { @Override public void onEvent(Trade trade, long l, boolean b) throws Exception { System.out.println("handler3:name: "+trade.getName()+", price:"+trade.getPrice()); } @Override public void onEvent(Trade trade) throws Exception { this.onEvent(trade); }}public class Main { public static void main(String[] args) throws InterruptedException { long beginTime = System.currentTimeMillis(); int bufferSize = 1024; ExecutorService executro = Executors.newFixedThreadPool(8); Disruptor<Trade> disruptor = new Disruptor<Trade>(new EventFactory<Trade>() { @Override public Trade newInstance() { return new Trade(); } },bufferSize,executro, ProducerType.SINGLE,new YieldingWaitStrategy()); EventHandlerGroup<Trade> handlerGroup = disruptor.handleEventsWith(new Handler1(),new Handler2()); handlerGroup.then(new Handler3()); disruptor.start(); CountDownLatch latch = new CountDownLatch(1); executro.submit(new TradePublisher(disruptor,latch)); latch.await(); disruptor.shutdown(); executro.shutdown(); System.out.println("总耗时:"+(System.currentTimeMillis()-beginTime)); }}
阅读全文
0 0
- disruptor(三)
- Disruptor笔记(三)-处理模式
- Disruptor笔记(三)-处理模式
- 三步创建Disruptor应用
- 三步创建Disruptor应用
- 三步创建Disruptor应用
- disruptor实操作手册(三)
- Disruptor
- disruptor
- disruptor
- disruptor
- disruptor
- disruptor
- Disruptor
- Disruptor
- Disruptor
- Disruptor
- Disruptor
- Android Material Design 之 NavigationView
- 致棋牌游戏运营失败者,老刘教你如何进行棋牌游戏开发
- C++知识总结(7)
- BZOJ 3237 浅谈CDQ分治+带撤销并查集
- 三点如何动态的画圆弧 其实主要是能知道绘制圆弧的方向就行
- disruptor(三)
- java学习之路
- 分析关于棋牌类游戏开发运营成功需要注意的几点
- Django创建模板、URL模式、创建视图函数
- 计算机图形学中的数学知识
- IOS成长之路-添加数据库文件到应用程序路径中
- 小白学tkinter(pack属性fill和expand)
- Java集合类详解
- JavaScript中事件操作和设置事件