我有一个函数需要2个函数,一个监视某个事件,另一个监视某个事件,另一个实际完成工作,每个函数都在将来运行,一旦事件未来返回失败,调用者线程就会发出工作者未来停止的信号。如果工作线程在接收到事件之前完成,则调用者线程然后通知观察者停止然后调用者返回。
这样可以正常工作,但事情是工作功能,实际工作可能/确实需要检查其他事件,每次我需要注意某个事件,我会发射2个额外的未来。问题是,最大期货的运行数量是否有限制?我有时最终会得到60个期货?线程池是否会根据需要增长?并且因为它们在一个线程池上运行,我假设它们不是太昂贵了吗?
答案 0 :(得分:5)
这完全取决于Executor。假设您使用Executors.newFixedThreadPool(n)创建了Executor
并向其提交了n * 100个任务,那么 n 个线程正在运行。
如果您使用的是Clojure future function,它会将您的任务提交给clojure.lang.Agent.soloExecutor。 soloExecutor是使用Executors.newCachedThreadPool(threadFactory)创建的,因此它将重用线程并尽可能多地运行。