【发布时间】:2011-03-22 21:17:27
【问题描述】:
我在 clojure 程序中创建了大量线程:
(import '(java.util.concurrent Executors))
(def *pool*
(Executors/newCachedThreadPool))
(defn do-something []
; work
Thread/sleep 200
; repeat)
(dotimes [i 10000]
(.submit *pool* do-something))
对我来说,JVM 之间已经有一段时间了,我基本上想知道这里是否有反对在 Executor 正在执行的函数中使用 sleep 或 yield 的论点?如果我理解正确,在这种情况下,我的每个工人都有自己的线程,因此应该没有副作用。
如果 Executor 使用的是 FixedThreadPool:
(Executors/newFixedThreadPool 1000)
事情变得更加复杂,因为线程在工作完成之前不会返回到池中,这意味着如果线程处于休眠状态,其他排队的工作人员将需要更长的时间才能完成。
我对这个实例中的线程的理解正确吗?
(注意:我怀疑我的设计实际上是错误的,但只是想确保我在正确的页面上)
【问题讨论】:
标签: java multithreading clojure jvm executorservice