是否有可能同时使用线程消费者/生产者?

时间:2013-12-13 19:54:13

标签: java multithreading

我有一系列关于消费者/生产者问题的问题。

  1. 是否可以同时创建一个线程消费者和生产者?

  2. 在线程之间发送/接收数据的最佳块队列类型是什么?

  3. 是否可以将线程之间的传输限制为线程实例集?以及如何?

  4. 感谢。

    对于问题1,我认为BlockingDeque是解决方案。 以下是一些解释:http://tutorials.jenkov.com/java-util-concurrent/blockingdeque.html

2 个答案:

答案 0 :(得分:4)

  1. 是。通常,如果一个线程既是消费者又是生产者,它会消耗不同于产品的“产品”,但它也可以消耗自己的产品。

  2. 取决于消息的特征和传输速率。但通常情况下可以忽略不计。

  3. 是 - 只是将队列传递给感兴趣的各方。

答案 1 :(得分:2)

添加到阿列克谢的答案:

  1. 虽然有可能,但请注意,此类线程必须在消费和生产活动之间分配它的CPU时间,因此它们不能同时运行。但它是完全可行的,例如,如果你的线程接受一些数据(从它的消费者端队列中获取),以某种方式快速转换它并将其卸载到下一个队列;

  2. 虽然LinkedBlockingQueue最大限度地减少了生产者方面的阻塞,但如果消费者的工作速度比生产者慢得多(例如,消费者对生产者的输入进行一些长期计算),那么它的使用可能会导致内存耗尽。因此,您可能需要ArrayBlockingQueue,这是有界的,因此不会导致OutOfMemory错误。