我有一个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是否有任何反对意见?如果我理解正确,在这种情况下,我的每个worker都有自己的线程,因此不应该有任何副作用。
如果Executor正在使用FixedThreadPool:
(Executors/newFixedThreadPool 1000)
由于线程只有在其工作完成后才会返回到池中,因此情况变得更加复杂,这意味着如果线程正在休眠,则其他排队的工作人员完成所需的时间将更长。
我对此实例中的线程理解正确吗?
(注意:我怀疑我的设计实际上是错误的,但只想确保我在正确的轨道上)