import java.util.concurrent.*; /** * @Auther: zyx. * @Date: 2019/3/1 10:22 */ public class Queue { //队列 private final BlockingQueue<Object> blockingQueue; //线程池 private final ExecutorService executorService; //定义线程池运行状态 private volatile boolean runing = true; //定义线程池开启多少个线程 private final int threadNum = 1; //队列容量 private final int queueCapacity = 1000; //初始化队列和线程池,开启线程 public Queue() { this.blockingQueue = new ArrayBlockingQueue<>(queueCapacity); this.executorService = Executors.newFixedThreadPool(threadNum); handler(); } private void handler() { for (int i = 0; i < threadNum; i++) { executorService.execute(new ThreadProcessor()); } } public void put(Object o) throws InterruptedException { blockingQueue.put(o); } public void stop() throws InterruptedException { this.runing = false; this.blockingQueue.clear(); this.executorService.shutdown(); if (!this.executorService.awaitTermination(10, TimeUnit.SECONDS)) { this.executorService.shutdownNow(); } } private class ThreadProcessor implements Runnable { @Override public void run() { while (runing) { Object o = null; try { o = blockingQueue.take(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + "消费队列数据={}" + o); } } } }
转载于:https://my.oschina.net/zhangyaxin/blog/3016692