Disruptor它是一个开源的并发框架,并获得2011 Duke's 程序框架创新奖,能够在无锁的情况下实现网络的Queue并发操作。
来一个他的例子吧.绝对是hello worl级别的.
只有两个类,一个是执行类,一个是自己定义的类.
自己需要定义一个event类,
- package com.trevorbernard.disruptor.examples;
- import com.lmax.disruptor.EventFactory;
- /**
- * WARNING: This is a mutable object which will be recycled by the RingBuffer. You must take a copy of data it holds
- * before the framework recycles it.
- */
- public final class ValueEvent {
- private String value;
- public String getValue() {
- return value;
- }
- public void setValue(String value) {
- this.value = value;
- }
- public final static EventFactory<ValueEvent> EVENT_FACTORY = new EventFactory<ValueEvent>() {
- public ValueEvent newInstance() {
- return new ValueEvent();
- }
- };
- }
这里要用到一个factory类,作用就是生成定义的那个类.
执行类:
- package com.trevorbernard.disruptor.examples;
- import java.util.UUID;
- import java.util.concurrent.ExecutorService;
- import java.util.concurrent.Executors;
- import com.lmax.disruptor.EventHandler;
- import com.lmax.disruptor.RingBuffer;
- import com.lmax.disruptor.dsl.Disruptor;
- public class Simple {
- @SuppressWarnings("unchecked")
- public static void main(String[] args) {
- ExecutorService exec = Executors.newCachedThreadPool();
- // Preallocate RingBuffer with 1024 ValueEvents
- Disruptor<ValueEvent> disruptor = new Disruptor<ValueEvent>(ValueEvent.EVENT_FACTORY, 1024, exec);
- final EventHandler<ValueEvent> handler = new EventHandler<ValueEvent>() {
- // event will eventually be recycled by the Disruptor after it wraps
- public void onEvent(final ValueEvent event, final long sequence, final boolean endOfBatch) throws Exception {
- System.out.println("Sequence: " + sequence+" ValueEvent: " + event.getValue());
- }
- };
- disruptor.handleEventsWith(handler);
- RingBuffer<ValueEvent> ringBuffer = disruptor.start();
- for (long i = 10; i < 15; i++) {
- String uuid =String.valueOf(i) ;
- long seq = ringBuffer.next();
- ValueEvent valueEvent = ringBuffer.get(seq);
- valueEvent.setValue(uuid);
- ringBuffer.publish(seq);
- }
- disruptor.shutdown();
- exec.shutdown();
- }
- }
设置一个事件的监听,这里只是打印一下.
然后就是把我们定义的事件写入到RingBuffer,然后发布.负责监听的就会接受到.
http://huangyunbin.iteye.com/blog/1919246
相关推荐
四、Disruptor学习路径 1. **理解基础概念**:首先,需要理解Disruptor的基本原理,包括环形缓冲区、事件处理、序列号和屏障等核心概念。 2. **实战演练**:通过提供的示例代码,了解如何创建和配置Disruptor,...
1. 理解Disruptor的基本概念,如Ring Buffer、Sequence、Barrier等。 2. 学习Disruptor的事件处理模型,包括事件处理器链和工作窃取算法。 3. 掌握SpringBoot的自动配置机制,了解如何在SpringBoot中创建自定义配置...
"DisruptorDemo.zip"的实例代码为我们提供了学习和理解Disruptor的一个良好起点,通过实际操作,我们可以更直观地感受Disruptor的强大性能。在实际项目中,尤其是对于需要处理大量并发请求的系统,Disruptor是一个...
通过这个"Disruptor demo",你可以学习到如何在实际项目中应用Disruptor来优化并发性能,以及如何配置和调整各种参数以适应不同的系统需求。这个示例将帮助你理解Disruptor如何简化并发编程,提高程序运行效率,尤其...
《Disruptor 框架详解与应用实例》 ...总的来说,这个压缩包提供了一个了解和学习 Disruptor 的良好起点,通过阅读源码、示例代码和 API 文档,我们可以深入了解这个框架如何帮助我们构建高并发、低延迟的应用系统。
1. **Disruptor的核心概念** - **Ring Buffer**:Disruptor的核心数据结构是一个环形缓冲区,它避免了锁和内存屏障带来的性能开销,通过固定大小的缓存块进行数据交换。 - **Sequencer**:负责为生产者和消费者...
1. **Disruptor的基本原理** Disruptor的核心是一个固定大小的环形缓冲区,每个槽位代表一个消息。生产者将消息放入缓冲区,消费者则从缓冲区取出消息。通过使用LongAdder等无锁算法,Disruptor避免了传统锁机制...
学习Disruptor的源码"study-disruptor"可以帮助我们深入理解其内部机制,例如如何实现无锁操作,如何优化内存访问,以及如何通过事件处理器链来并行处理事件。通过对这些概念和技术的理解,我们可以更好地利用...
Disruptor是一款由LMAX交易所开发的开源Java框架,它专为高并发环境下的线程间通信设计,致力于...LMAX-Exchange-disruptor-770b35b这个版本包含了源代码,开发者可以通过阅读和学习源码,更深入地理解其内部实现机制。
disruptor-3.3.11.jar 无锁并行框架 值得学习 jar包
Disruptor 是一个高性能的并发编程框架,由 LMAX 公司开发,旨在解决线程间数据交换的...尽管随着Disruptor版本的迭代,实现细节有所变化,但其核心设计理念依然保持不变,对开发者来说仍然具有很高的学习和实践价值。
disruptor-3.3.11-sources.jar jar包源码,值得学习,源码
《深入解析高并发框架Disruptor》 在现代互联网应用中,处理高并发场景是必不可少的技术挑战。Disruptor,由LMAX公司开发并开源...通过深入学习提供的Disruptor代码,可以更好地掌握其精髓,从而在实践中发挥其潜力。
1. **环形缓冲区(Ring Buffer)**:Disruptor的核心是环形缓冲区,它是一个固定大小的数组,用于存储待处理的事件。这个设计避免了在内存中频繁分配和释放空间,从而减少了垃圾回收的压力。环形缓冲区的索引使用模...
- [Disruptor中文学习资源](http://ifeve.com/disruptor/) - [Java中的CAS操作详解](https://blog.csdn.net/mmoren/article/details/79185862) Disruptor凭借其优秀的并发性能和灵活性,在实际项目中发挥着重要作用...
Disruptor是由英国金融服务公司LMAX开发的一种高性能的并发数据结构,主要被设计为一个低延迟、高吞吐量的消息传递框架...通过深入学习和实践,开发者可以更好地利用Disruptor,为Android应用带来前所未有的性能提升。
1. 简化的API:为了简化Disruptor的使用,tiny_disruptor可能提供了更简洁的接口,使开发者能够快速地集成到自己的项目中。 2. 自动序列化:处理Ring Buffer中的数据时,tiny_disruptor可能会提供自动的序列化和反...
学习和掌握Disruptor不仅有助于提升Java并发程序的性能,还能帮助我们理解更深层次的并发设计思想。在高并发场景下,如大数据处理、实时计算等领域,Disruptor都显示出了强大的优势。因此,对于希望优化并发性能的...