`
m635674608
  • 浏览: 5043616 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Disruptor学习(1)

    博客分类:
  • java
 
阅读更多

Disruptor它是一个开源的并发框架,并获得2011 Duke's 程序框架创新奖,能够在无锁的情况下实现网络的Queue并发操作。

来一个他的例子吧.绝对是hello worl级别的.

只有两个类,一个是执行类,一个是自己定义的类.
自己需要定义一个event类,

Java代码  收藏代码
  1. package com.trevorbernard.disruptor.examples;  
  2.   
  3. import com.lmax.disruptor.EventFactory;  
  4.   
  5. /** 
  6.  * WARNING: This is a mutable object which will be recycled by the RingBuffer. You must take a copy of data it holds 
  7.  * before the framework recycles it. 
  8.  */  
  9. public final class ValueEvent {  
  10.     private String value;  
  11.   
  12.     public String getValue() {  
  13.         return value;  
  14.     }  
  15.   
  16.     public void setValue(String value) {  
  17.         this.value = value;  
  18.     }  
  19.   
  20.     public final static EventFactory<ValueEvent> EVENT_FACTORY = new EventFactory<ValueEvent>() {  
  21.         public ValueEvent newInstance() {  
  22.             return new ValueEvent();  
  23.         }  
  24.     };  
  25. }  


这里要用到一个factory类,作用就是生成定义的那个类.

执行类

Java代码  收藏代码
  1. package com.trevorbernard.disruptor.examples;  
  2.   
  3. import java.util.UUID;  
  4. import java.util.concurrent.ExecutorService;  
  5. import java.util.concurrent.Executors;  
  6.   
  7. import com.lmax.disruptor.EventHandler;  
  8. import com.lmax.disruptor.RingBuffer;  
  9. import com.lmax.disruptor.dsl.Disruptor;  
  10.   
  11. public class Simple {  
  12.     @SuppressWarnings("unchecked")  
  13.     public static void main(String[] args) {  
  14.         ExecutorService exec = Executors.newCachedThreadPool();  
  15.         // Preallocate RingBuffer with 1024 ValueEvents  
  16.         Disruptor<ValueEvent> disruptor = new Disruptor<ValueEvent>(ValueEvent.EVENT_FACTORY, 1024, exec);  
  17.         final EventHandler<ValueEvent> handler = new EventHandler<ValueEvent>() {  
  18.             // event will eventually be recycled by the Disruptor after it wraps  
  19.             public void onEvent(final ValueEvent event, final long sequence, final boolean endOfBatch) throws Exception {  
  20.                 System.out.println("Sequence: " + sequence+"   ValueEvent: " + event.getValue());  
  21.             }  
  22.         };  
  23.   
  24.         disruptor.handleEventsWith(handler);  
  25.         RingBuffer<ValueEvent> ringBuffer = disruptor.start();  
  26.         for (long i = 10; i < 15; i++) {  
  27.             String uuid =String.valueOf(i)    ;  
  28.             long seq = ringBuffer.next();  
  29.             ValueEvent valueEvent = ringBuffer.get(seq);  
  30.             valueEvent.setValue(uuid);  
  31.             ringBuffer.publish(seq);  
  32.         }  
  33.         disruptor.shutdown();  
  34.         exec.shutdown();  
  35.     }  
  36. }  



设置一个事件的监听,这里只是打印一下.
然后就是把我们定义的事件写入到RingBuffer,然后发布.负责监听的就会接受到.

http://huangyunbin.iteye.com/blog/1919246

分享到:
评论

相关推荐

    Disruptor学习.7z

    四、Disruptor学习路径 1. **理解基础概念**:首先,需要理解Disruptor的基本原理,包括环形缓冲区、事件处理、序列号和屏障等核心概念。 2. **实战演练**:通过提供的示例代码,了解如何创建和配置Disruptor,...

    springboot整合Disruptor并发编程框架 #资源达人分享计划#

    1. 理解Disruptor的基本概念,如Ring Buffer、Sequence、Barrier等。 2. 学习Disruptor的事件处理模型,包括事件处理器链和工作窃取算法。 3. 掌握SpringBoot的自动配置机制,了解如何在SpringBoot中创建自定义配置...

    DisruptorDemo.zip

    "DisruptorDemo.zip"的实例代码为我们提供了学习和理解Disruptor的一个良好起点,通过实际操作,我们可以更直观地感受Disruptor的强大性能。在实际项目中,尤其是对于需要处理大量并发请求的系统,Disruptor是一个...

    Disruptor demo

    通过这个"Disruptor demo",你可以学习到如何在实际项目中应用Disruptor来优化并发性能,以及如何配置和调整各种参数以适应不同的系统需求。这个示例将帮助你理解Disruptor如何简化并发编程,提高程序运行效率,尤其...

    disruptor jar包+Demo+Api

    《Disruptor 框架详解与应用实例》 ...总的来说,这个压缩包提供了一个了解和学习 Disruptor 的良好起点,通过阅读源码、示例代码和 API 文档,我们可以深入了解这个框架如何帮助我们构建高并发、低延迟的应用系统。

    LMAX disruptor jar包+Demo+Api+src源码 disruptor-3.0.1.jar

    1. **Disruptor的核心概念** - **Ring Buffer**:Disruptor的核心数据结构是一个环形缓冲区,它避免了锁和内存屏障带来的性能开销,通过固定大小的缓存块进行数据交换。 - **Sequencer**:负责为生产者和消费者...

    Disruptor应用实例

    1. **Disruptor的基本原理** Disruptor的核心是一个固定大小的环形缓冲区,每个槽位代表一个消息。生产者将消息放入缓冲区,消费者则从缓冲区取出消息。通过使用LongAdder等无锁算法,Disruptor避免了传统锁机制...

    Java工具:高性能并发工具Disruptor简单使用

    学习Disruptor的源码"study-disruptor"可以帮助我们深入理解其内部机制,例如如何实现无锁操作,如何优化内存访问,以及如何通过事件处理器链来并行处理事件。通过对这些概念和技术的理解,我们可以更好地利用...

    disruptor高性能Java线程间通讯库

    Disruptor是一款由LMAX交易所开发的开源Java框架,它专为高并发环境下的线程间通信设计,致力于...LMAX-Exchange-disruptor-770b35b这个版本包含了源代码,开发者可以通过阅读和学习源码,更深入地理解其内部实现机制。

    disruptor-3.3.11.jar

    disruptor-3.3.11.jar 无锁并行框架 值得学习 jar包

    Disruptor 一种可替代有界队列完成并发线程间数据交换高性能解决方案.docx

    Disruptor 是一个高性能的并发编程框架,由 LMAX 公司开发,旨在解决线程间数据交换的...尽管随着Disruptor版本的迭代,实现细节有所变化,但其核心设计理念依然保持不变,对开发者来说仍然具有很高的学习和实践价值。

    disruptor-3.3.11-sources.jar

    disruptor-3.3.11-sources.jar jar包源码,值得学习,源码

    高并发框架Disruptor代码

    《深入解析高并发框架Disruptor》 在现代互联网应用中,处理高并发场景是必不可少的技术挑战。Disruptor,由LMAX公司开发并开源...通过深入学习提供的Disruptor代码,可以更好地掌握其精髓,从而在实践中发挥其潜力。

    share-disruptor.zip

    1. **环形缓冲区(Ring Buffer)**:Disruptor的核心是环形缓冲区,它是一个固定大小的数组,用于存储待处理的事件。这个设计避免了在内存中频繁分配和释放空间,从而减少了垃圾回收的压力。环形缓冲区的索引使用模...

    disruptor技术培训

    - [Disruptor中文学习资源](http://ifeve.com/disruptor/) - [Java中的CAS操作详解](https://blog.csdn.net/mmoren/article/details/79185862) Disruptor凭借其优秀的并发性能和灵活性,在实际项目中发挥着重要作用...

    Disruptor.zip

    Disruptor是由英国金融服务公司LMAX开发的一种高性能的并发数据结构,主要被设计为一个低延迟、高吞吐量的消息传递框架...通过深入学习和实践,开发者可以更好地利用Disruptor,为Android应用带来前所未有的性能提升。

    tiny_disruptor:简化的[disruptor](https

    1. 简化的API:为了简化Disruptor的使用,tiny_disruptor可能提供了更简洁的接口,使开发者能够快速地集成到自己的项目中。 2. 自动序列化:处理Ring Buffer中的数据时,tiny_disruptor可能会提供自动的序列化和反...

    disruptror的jar包和例子

    学习和掌握Disruptor不仅有助于提升Java并发程序的性能,还能帮助我们理解更深层次的并发设计思想。在高并发场景下,如大数据处理、实时计算等领域,Disruptor都显示出了强大的优势。因此,对于希望优化并发性能的...

Global site tag (gtag.js) - Google Analytics