Disruptor-07 中有哪些代码范例
发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,这篇文章将为大家详细讲解有关Disruptor-07 中有哪些代码范例,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。public class Test
千家信息网最后更新 2025年02月02日Disruptor-07 中有哪些代码范例
这篇文章将为大家详细讲解有关Disruptor-07 中有哪些代码范例,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
public class Test { private static Logger logger = LogManager.getLogger(); @SuppressWarnings("unchecked") public static void main(String[] args) throws InterruptedException { // The factory for the event TestEventFactory factory = new TestEventFactory(); // Specify the size of the ring buffer, must be power of 2. int bufferSize = 1024; // Construct the Disruptor Disruptordisruptor = new Disruptor (factory, bufferSize, DaemonThreadFactory.INSTANCE, ProducerType.SINGLE, new BlockingWaitStrategy()); // Create EventHandler TestEventHandler handler1 = new TestEventHandler("handler1"); TestEventHandler handler2 = new TestEventHandler("handler2"); TestEventHandler handler3 = new TestEventHandler("handler3"); TestEventHandler handler4 = new TestEventHandler("handler4"); // Connect the handler int count = 100; // Unicast采取WorkPool方式,3个WorkHandler 累计执行100次。 // Event到达时,哪个WorkHandler被调度不确定。 // disruptor.handleEventsWithWorkerPool(handler1, handler2, handler3); // MulticastTest并发处理方式,3个EventHandler,各执行100次,累计300次; // 每个Event到达时,EventHandler的处理顺序不确定。 // 并发( handler1, handler2, handler3) // EventHandler:handler1--85:k-v // EventHandler:handler3--85:k-v // EventHandler:handler2--85:k-v // EventHandler:handler1--86:k-v // EventHandler:handler3--86:k-v // EventHandler:handler2--86:k-v <-----并发顺序不确定 // EventHandler:handler2--87:k-v <-----并发顺序不确定 // EventHandler:handler1--87:k-v // EventHandler:handler3--87:k-v // EventHandler:handler3--88:k-v // EventHandler:handler2--88:k-v // EventHandler:handler1--88:k-v // disruptor.handleEventsWith(handler1, handler2, handler3); // Pipeline串行处理方式,3个EventHandler,各执行100次,累计300次。 // 每个Event到达时,EventHandler的处理顺序与handleEventsWith的顺序一致。 // 顺序:handler1->handler2->handler3 // EventHandler:handler1--97:k-v // EventHandler:handler2--97:k-v // EventHandler:handler3--97:k-v // EventHandler:handler1--98:k-v // EventHandler:handler2--98:k-v // EventHandler:handler3--98:k-v // EventHandler:handler1--99:k-v // EventHandler:handler2--99:k-v // EventHandler:handler3--99:k-v // EventHandler:handler1--100:k-v // EventHandler:handler2--100:k-v // EventHandler:handler3--100:k-v //disruptor.handleEventsWith(handler1).handleEventsWith(handler2).handleEventsWith(handler3); //Diamond //按照 handler1-> 并发(handler2, hander3) ->handler4 调度 disruptor.handleEventsWith(handler1).handleEventsWith(handler2,handler3).handleEventsWith(handler4); // Start the Disruptor, starts all threads running disruptor.start(); // Get the ring buffer from the Disruptor to be used for publishing. RingBuffer ringBuffer = disruptor.getRingBuffer(); TestEventProducer producer = new TestEventProducer(ringBuffer); for (int i = 1; i <= count; i++) { producer.onEvent("k", "v"); Thread.sleep(100); } Thread.sleep(10000); }}
public class TestEvent implements Event { private String key; private String value; public String getKey() { return key; } public void setKey(String key) { this.key = key; } public String getValue() { return value; } public void setValue(String value) { this.value = value; }}
package com.lands.disruptor.unicast;import com.lmax.disruptor.EventFactory;public class TestEventFactory implements EventFactory{ public TestEvent newInstance() { return new TestEvent(); }}
package com.lands.disruptor.unicast;import java.util.concurrent.atomic.AtomicInteger;import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;import com.lmax.disruptor.EventHandler;import com.lmax.disruptor.WorkHandler;public class TestEventHandler implements EventHandler, WorkHandler { private static Logger logger = LogManager.getLogger(); private String handlerName; private AtomicInteger count = new AtomicInteger(); public TestEventHandler(String name) { this.handlerName = name; } public String getHandlerName() { return handlerName; } public void onEvent(TestEvent event) throws Exception { logger.info("WorkHandler:" + this.handlerName + "-" + count.decrementAndGet() + ":" + event.getKey() + "-" + event.getValue()); //Thread.sleep(100); } public void onEvent(TestEvent event, long sequence, boolean endOfBatch) throws Exception { logger.info("EventHandler:" + this.handlerName + "-" + count.decrementAndGet() + ":" + event.getKey() + "-" + event.getValue()); //Thread.sleep(100); }}
package com.lands.disruptor.unicast;import com.lands.disruptor.EventProducer;import com.lmax.disruptor.RingBuffer;public class TestEventProducer extends EventProducer{ public TestEventProducer(RingBuffer ringBuffer) { super(ringBuffer); } @Override public void process(TestEvent event, String... data) { event.setKey(data[0]); event.setValue(data[1]); }}
关于Disruptor-07 中有哪些代码范例就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
代码
范例
内容
文章
方式
更多
知识
篇文章
顺序
处理
调度
不错
质量
参考
帮助
有关
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全工程师技术含量
数据库课程设计课程作业
中国电信富县dns服务器地址
建立法律法规数据库代码
服务器ip是什么
软件开发要学哪些基础
我的世界1.7服务器怎么刷物品
udc服务器成本
2017年网络安全竞赛题
计算机软件开发用什么
广州龙芯服务器供应价格
信息网络安全管理员报名网址
如何启动许可证管理器服务器
tcpip协议中的网络安全
30岁软件开发
网络安全测试包括哪些
网络安全法答案
重庆c语言软件开发定制
2015网络技术收徒
内网服务器链接外网
网络安全工程师技术含量
mongodb数据库安全
甲骨文arm服务器能干什么
向大学生宣传网络安全的意义
服务器查看系统日志
手机上的萤石云服务器异常
网络安全画画图大全
数据库安装密码校验不对
KVM服务器硬件要求
蚌埠电力软件开发多少钱