demo1 单生产者多消费者创建。

maven 依赖

<!-- https://mvnrepository.com/artifact/com.lmax/disruptor -->
<dependency>
<groupId>com.lmax</groupId>
<artifactId>disruptor</artifactId>
<version>3.4.</version>
</dependency>

1 对象 - Message

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Message2 {
private String id;
private String name;
private double price;
}

2 在主函数中创建 disruptor

Disruptor<Message2> disruptor = new Disruptor<>(
new EventFactory<Message2>() {
@Override
public Message2 newInstance() {
return new Message2();
}
},
<< ,
Executors.defaultThreadFactory(),
ProducerType.SINGLE,
new BusySpinWaitStrategy()
);

3 disruptor 绑定消费者

// disruptor 绑定消费者
disruptor.handleEventsWith(new MessageHandler1()); //创建消费者
@Slf4j
public class MessageHandler1 implements EventHandler<Message2> {
@Override
public void onEvent(Message2 event, long sequence, boolean endOfBatch) throws Exception {
event.setId(UUID.randomUUID().toString());
log.info("【handler1,set id】 id: {}, name: {}, price: {}", event.getId(), event.getName(), event.getPrice());
}
}

4 启动 disruptor

RingBuffer<Message2> ringBuffer = disruptor.start();

5 disruptor 绑定生产者

//绑定生产者
CountDownLatch latch = new CountDownLatch();
ExecutorService es = Executors.newFixedThreadPool();
es.submit(new MessagePublish2(disruptor, latch)); // 生产者类
public class MessagePublish2 implements Runnable {
private Disruptor<Message2> disruptor;
private CountDownLatch latch; public MessagePublish2(Disruptor<Message2> disruptor, CountDownLatch latch) {
this.disruptor = disruptor;
this.latch = latch;
} @Override
public void run() {
for (int i = ; i < ; i++) {
disruptor.publishEvent(new MessageEventTranslator());
}
latch.countDown();
}
}

6 阻塞等待 & 关闭服务

        // 阻塞等待
latch.await(); // 关闭服务
es.shutdown();
disruptor.shutdown();

disruptor 单生产者多消费者的更多相关文章

  1. LMAX Disruptor—多生产者多消费者中,消息复制分发的高性能实现

    解决的问题 当我们有多个消息的生产者线程,一个消费者线程时,他们之间如何进行高并发.线程安全的协调? 很简单,用一个队列. 当我们有多个消息的生产者线程,多个消费者线程,并且每一条消息需要被所有的消费 ...

  2. 使用Disruptor实现生产者和消费者模型

    生产者 package cn.lonecloud.procum.disruptor; import cn.lonecloud.procum.Data; import com.lmax.disrupto ...

  3. disruptor 多生产者多消费者实战 四

    一.创建event类 Order public class Order { private String id; private String name; private double price; ...

  4. Disruptor框架中生产者、消费者的各种复杂依赖场景下的使用总结

    版权声明:原创作品,谢绝转载!否则将追究法律责任. Disruptor是一个优秀的并发框架,可以实现单个或多个生产者生产消息,单个或多个消费者消息,且消费者之间可以存在消费消息的依赖关系.网上其他博客 ...

  5. 从零开始实现lmax-Disruptor队列(一)RingBuffer与单生产者、单消费者工作原理解析

    1.lmax-Disruptor队列介绍 disruptor是英国著名的金融交易所lmax旗下技术团队开发的一款java实现的高性能内存队列框架 其发明disruptor的主要目的是为了改进传统的内存 ...

  6. 【disruptor】2、disruptor中生产者线程与消费者之间的协调

    由于ringbuffer是一个环形的队列,那么生产者和消费者在遍历这个队列的时候,如何制衡呢? 1.生产快,消费慢,数据丢失? 生产者速度过快,导致一个对象还没消费完,就循环生产了一个新的对象要加入r ...

  7. RabbitMQ入门学习系列(二),单生产者消费者

    友情提示 我对我的文章负责,发现好多网上的文章 没有实践,都发出来的,让人走很多弯路,如果你在我的文章中遇到无法实现,或者无法走通的问题.可以直接在公众号<爱码农爱生活 >留言.必定会再次 ...

  8. 线程操作案例--生产者与消费者,Object类对线程的支持

    本章目标 1)加深对线程同步的理解 2)了解Object类中对线程的支持方法. 实例 生产者不断生产,消费者不断消费产品. 生产者生产信息后将其放到一个区域中,之后消费者从区域中取出数据. 既然生产的 ...

  9. PV操作——生产者和消费者

    首先,先来看几个概念: 同步:协作的过程,比如,多人开发合作. 相互排斥:争抢资源的过程.比如苦逼的大学选课: 临界区:进程中对临界资源实施操作的那段程序: 临界资源:一次仅仅能一个进程使用的资源,比 ...

随机推荐

  1. C实现栈与队列

    C实现栈与队列 做了个栈和队列的基础demo,写得比较快,就没有什么注释,其实看各个函数的名字就可以知道函数的作用了. 栈的实现 #include <stdio.h> #include & ...

  2. python安装脚本

    [root@dn3 hadoop]# cat install.py #!/usr/bin/python #coding=utf- import os import sys : pass else: p ...

  3. pyspark读取hdfs 二进制文件

    程序如下: from pyspark import SparkConf, SparkContext conf = SparkConf().setAppName("My test App&qu ...

  4. Ffmpeg常用转码命令

    H264视频转ts视频流 ffmpeg -i test.h264 -vcodec copy -f mpegts test.ts H264视频转mp4 ffmpeg -i test.h264 -vcod ...

  5. JVM那些事儿之内存区域

    相信绝大多数java开发者或多或少的都应该知道jvm,但是有多少人又深入去了解过,笔者深感自身能力的不足,去看了些资料,觉得还是有必要整理下自己的学习记录,时常回头看看,多看多实践提升自己的能力,故开 ...

  6. 大马过安全狗拿webshell方法

    很多拿站的朋友,都知道大马很多都会被安全狗拦截,最近一个大牛给我一个方法,竟然成功,所以分享下这个方法. 将大马写到一个txt文件里面,命名为dama.txt,再建一个文本文档,asp的就写入:< ...

  7. .net框架-链表(LinkedList<T>)

    链表LinkedList 优点:插入元素快 缺点:查找元素慢 .net framework只提供了泛型版本 继承接口:ICollection<T>, IEnumerable<T> ...

  8. [Svelte 3] Render HTML directly into a component in Svelte 3

    Disclaimer: please use this feature carefully. <script> let stringToRender = "<h1>H ...

  9. go条件变量同步机制

    sync.Cond代表条件变量,需要配置锁才能有用 package main import ( "fmt" "runtime" "sync" ...

  10. memorization-根据输入重新计算render的数据

    在实际开发过程中,经常遇到根据props和state变化,重新计算“渲染阶段”需要的数据的情况. 如:根据输入的值实时过滤select列表,或者表格数据(查询过滤). 问题特点: 1. 每次渲染都会调 ...