import java.util.concurrent.*;
/**
* @Auther: zyx.
* @Date: 2019/3/1 10:22
*/
public class Queue {
private final BlockingQueue 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);
}
}
}
}