【发布时间】:2011-04-30 15:12:32
【问题描述】:
- 生产者是有限的,消费者也应该如此。
- 问题是何时停止,而不是如何运行。
- 可以通过任何 类型的 BlockingQueue 进行通信。
- 不能依赖中毒队列(PriorityBlockingQueue)
- 不能依赖锁定队列(SynchronousQueue)
- 不能只依赖offer/poll(SynchronousQueue)
- 可能存在更奇特的队列。
在另一个(可能是惰性的)seq 上创建一个排队的 seq。排队的 seq 会在后台产生一个具体的 seq,最多可以达到 n 项领先于消费者。 n-or-q 可以是整数 n 缓冲区 大小,或 java.util.concurrent BlockingQueue 的一个实例。笔记 如果读者领先于 制片人。
http://clojure.github.com/clojure/clojure.core-api.html#clojure.core/seque
到目前为止我的尝试 + 一些测试:https://gist.github.com/934781
感谢 Java 或 Clojure 中的解决方案。
【问题讨论】:
-
在 Java 中,我只会使用 ExecutorService 或包装它的类来处理您需要的所有事件类型,因为它可以处理您提到的所有事件等等。
标签: java concurrency clojure