Java最新Java并发框架Disruptor教程(二)、快速入门_java distrupt,面试题附答案

分享

首先分享一份学习大纲,内容较多,涵盖了互联网行业所有的流行以及核心技术,以截图形式分享:

(亿级流量性能调优实战+一线大厂分布式实战+架构师筑基必备技能+设计思想开源框架解读+性能直线提升架构技术+高效存储让项目性能起飞+分布式扩展到微服务架构…实在是太多了)

其次分享一些技术知识,以截图形式分享一部分:

Tomcat架构解析:

算法训练+高分宝典:

Spring Cloud+Docker微服务实战:

最后分享一波面试资料:

切莫死记硬背,小心面试官直接让你出门右拐

1000道互联网Java面试题:

Java高级架构面试知识整理:

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

}


* **2、创建EventFactory**  
 为了让Disruptor为我们预先分配这些事件,我们需要一个将执行构造的EventFactory,



import com.lmax.disruptor.EventFactory;

public class LongEventFactory implements EventFactory
{
public LongEvent newInstance()
{
return new LongEvent();
}
}


* **3、创建事件的消费者**  
 一旦我们定义了事件,我们需要创建一个处理这些事件的消费者。在我们的例子中,我们要做的就是从控制台中打印出值。



import com.lmax.disruptor.EventHandler;

public class LongEventHandler implements EventHandler
{
public void onEvent(LongEvent event, long sequence, boolean endOfBatch)
{
System.out.println("Event: " + event);
}
}


我们需要这些事件的来源,为了举个例子,我假设数据来自某种I / O设备,例如网络或ByteBuffer形式的文件。


* **4、创建事件生产者**  
 这里将介绍两种生产者的创建方式  
 1). 使用Translator创建



import com.lmax.disruptor.RingBuffer;
import com.lmax.disruptor.EventTranslatorOneArg;

public class LongEventProducerWithTranslator
{
private final RingBuffer ringBuffer;

public LongEventProducerWithTranslator(RingBuffer<LongEvent> ringBuffer)
{
    this.ringBuffer = ringBuffer;
}

private static final EventTranslatorOneArg<LongEvent, ByteBuffer> TRANSLATOR =
    new EventTranslatorOneArg<LongEvent, ByteBuffer>()
    {
        public void translateTo(LongEvent event, long sequence, ByteBuffer bb)
        {
            event.set(bb.getLong(0));
        }
    };

public void onData(ByteBuffer bb)
{
    ringBuffer.publishEvent(TRANSLATOR, bb);
}

}


2). 使用传统API创建  
 其中只要有



import com.lmax.disruptor.RingBuffer;

public class LongEventProducer
{
private final RingBuffer ringBuffer;

public LongEventProducer(RingBuffer<LongEvent> ringBuffer)
{
    this.ringBuffer = ringBuffer;
}

public void onData(ByteBuffer bb)
{
    long sequence = ringBuffer.next();  // Grab the next sequence
    try
    {
        LongEvent event = ringBuffer.get(sequence); // Get the entry in the Disruptor
                                                    // for the sequence
        event.set(bb.getLong(0));  // Fill with data
    }
    finally
    {
        ringBuffer.publish(sequence);
    }
}

}


显而易见的是,事件发布变得比使用简单队列更复杂。这是由于对事件预分配的需求。它需要(在最低级别)消息发布的两阶段方法,即声明环形缓冲区中的插槽然后发布可用数据。还必须将发布包装在try / finally块中。如果我们在Ring Buffer中声明一个插槽(调用RingBuffer.next()),那么我们必须发布这个序列。如果不这样做可能会导致干扰者状态的腐败。具体而言,在多生产者的情况下,这将导致消费者停滞并且在没有重启的情况下无法恢复。因此,建议使用EventTranslator API。


* **5、启动任务**



import com.lmax.disruptor.dsl.Disruptor;
import com.lmax.disruptor.RingBuffer;
import com.lmax.disruptor.util.DaemonThreadFactory;
import java.nio.ByteBuffer;

public class LongEventMain
{

总结

谈到面试,其实说白了就是刷题刷题刷题,天天作死的刷。。。。。

为了准备这个“金三银四”的春招,狂刷一个月的题,狂补超多的漏洞知识,像这次美团面试问的算法、数据库、Redis、设计模式等这些题目都是我刷到过的

并且我也将自己刷的题全部整理成了PDF或者Word文档(含详细答案解析)

我的美团offer凉凉了?开发工程师(Java岗)三面结束等通知...

66个Java面试知识点

架构专题(MySQL,Java,Redis,线程,并发,设计模式,Nginx,Linux,框架,微服务等)+大厂面试题详解(百度,阿里,腾讯,华为,迅雷,网易,中兴,北京中软等)

我的美团offer凉凉了?开发工程师(Java岗)三面结束等通知...

算法刷题(PDF)

我的美团offer凉凉了?开发工程师(Java岗)三面结束等通知...

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

va面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)收录**

需要这份系统化的资料的朋友,可以点击这里获取

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值