【发布时间】:2019-06-10 05:06:53
【问题描述】:
当我尝试学习 JAVA 编程的多线程部分时,在处理 One Producer - Multiple Consumer 编码时遇到以下问题。
我想要实现的是:多个消费者线程按照它们被放入队列的顺序将它们从队列中取出。也就是说,让消费者线程整体保持先进先出的方式。
final BlockingDeque<String> deque = new LinkedBlockingDeque<String>();
Runnable rb = new Runnable() {
public void run() {
try {
System.out.println(deque.takeLast());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
deque.putFirst("a");
deque.putFirst("b");
deque.putFirst("c");
deque.putFirst("d");
ExecutorService pool = Executors.newFixedThreadPool(4);
pool.submit(rb);
pool.submit(rb);
pool.submit(rb);
pool.submit(rb);
我在寻找什么: 一个 b C d
实际输出: b C 一个 d
OR 随机顺序
任何简单的解决方案来解决这个问题?谢谢!
【问题讨论】:
-
需要同步输出
synchronized (deque) { try { System.out.println(deque.takeLast()); } catch (InterruptedException e) { e.printStackTrace(); } }
标签: java multithreading fifo