加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_宿迁站长网 (https://www.0527zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 系统 > 正文

使用线程执行框架的一次过程

发布时间:2021-06-01 22:28:14 所属栏目:系统 来源:互联网
导读:副标题#e# 一个线程从某个地方接收消息(数据),可以是其他主机或者消息队列,然后转由另外的一个线程池来执行具体处理消息的逻辑,并且消息的处理速度小于接收消息的速度。这种情景很常见,试想一下,你会怎么设计和实现? 直观想法 很显然采用JUC的线程框
副标题[/!--empirenews.page--]

一个线程从某个地方接收消息(数据),可以是其他主机或者消息队列,然后转由另外的一个线程池来执行具体处理消息的逻辑,并且消息的处理速度小于接收消息的速度。这种情景很常见,试想一下,你会怎么设计和实现?

直观想法

很显然采用JUC的线程框架,可以迅速写出代码。

消息接收者:

public class Receiver { 

    private static volatile boolean inited = false; 

    private static volatile boolean shutdown = false; 

    private static volatile int cnt = 0; 

 

    private MessageHandler messageHandler; 

 

    public void start(){ 

        Executors.newSingleThreadExecutor().execute(new Runnable() { 

            @Override 

            public void run() { 

                while(!shutdown){ 

                    init(); 

                    recv(); 

                } 

            } 

        }); 

    } 

 

    /** 

     * 模拟消息接收 

     */ 

    public void recv(){ 

            Message msg = new Message("Msg" + System.currentTimeMillis()); System.out.println(String.format("接收到消息(%d): %s", ++cnt, msg)); messageHandler.handle(msg); } public void init(){ if(!inited){ messageHandler = new MessageHandler(); inited = true; } } public static void main(String[] args) { new Receiver().start(); 

    } 

消息处理:

public class MessageHandler { 

 

    private static final int THREAD_POOL_SIZE = 4; 

 

    private ExecutorService service = Executors.newFixedThreadPool(THREAD_POOL_SIZE); 

 

    public void handle(Message msg) { 

        try { 

            service.execute(new Runnable() { 

                @Override 

(编辑:云计算网_宿迁站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!