package com.iailab.netsdk.common; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.LinkedBlockingDeque; public class EventTaskCommonQueue { // 设置一个队列,容é‡çœ‹æƒ…况改 private final int MAX_TASK_COUNT = 10000; // é˜Ÿåˆ—å®¹é‡ private final LinkedBlockingDeque<EventTaskHandler> eventTasks = new LinkedBlockingDeque<EventTaskHandler>(MAX_TASK_COUNT); // èµ·ä¸€ä¸ªçº¿ç¨‹æ± private final int MAX_THREAD_COUNT = 10; // çº¿ç¨‹æ± å®¹é‡ private ExecutorService eventQueueService = Executors.newFixedThreadPool(MAX_THREAD_COUNT); // 用于检验æœåŠ¡è¿è¡ŒçŠ¶æ€ private volatile boolean running = true; // 用于查看当å‰çº¿ç¨‹çŠ¶æ€ private Future<?> eventQueueThreadStatus; // åˆå§‹åŒ– public void init() { eventQueueThreadStatus = eventQueueService.submit(new Thread(new Runnable() { @Override public void run() { while (running) { try { EventTaskHandler task = eventTasks.take(); //开始一个任务 try { task.eventTaskProcess(); // 主è¦çš„è¿è¡Œå‡½æ•° } catch (Exception e) { System.err.println("任务处ç†å‘生错误"); // error } } catch (InterruptedException e) { System.err.println("任务已æ„外åœæ¢"); // error running = false; } } } }, "Event call back thread init")); } // å‘é˜Ÿåˆ—æ·»åŠ æ–°çš„ä»»åŠ¡ public boolean addEvent(EventTaskHandler eventHandler) { if (!running) { System.out.println("任务已åœæ¢"); // warning return false; } boolean success = eventTasks.offer(eventHandler); if (!success) { // é˜Ÿåˆ—å·²æ»¡ï¼Œæ— æ³•å†æ·»åŠ System.out.println("æ·»åŠ åˆ°äº‹ä»¶é˜Ÿåˆ—å¤±è´¥"); } return success; } // 手动å¯åŠ¨æœåŠ¡ public void activeService() { running = true; if (eventQueueService.isShutdown()) { eventQueueService = Executors.newFixedThreadPool(MAX_THREAD_COUNT);; init(); System.out.println("çº¿ç¨‹æ± å·²å…³é—,é‡æ–°åˆå§‹åŒ–çº¿ç¨‹æ± åŠä»»åŠ¡"); } if (eventQueueThreadStatus.isDone()) { init(); System.out.println("çº¿ç¨‹æ± ä»»åŠ¡ç»“æŸï¼Œé‡æ–°åˆå§‹åŒ–任务"); } } // 手动关é—æœåŠ¡ public void destroy() { running = false; eventQueueService.shutdownNow(); } }