使用线程执行框架的一次过程
副标题[/!--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 (编辑:成都站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |