我使用的是Executors.newFixedThreadPool(100)方法。单个命令的执行大约需要20个线程。执行该命令5-6次后,应用程序停止响应。我的线程正在实现Callable。
我怀疑,该线程不会在完成后终止。我还调用shutdown()来终止线程。
谁能告诉我,当我使用get()方法检索线程的结果时,它是被终止了(也就是说,它从队列中删除了)还是仍然在队列中,由池用来存储线程。
发布于 2011-06-06 21:24:20
线程不会终止。事情是这样的:
Callable<>F212>
所以要么结果队列溢出,要么你的Callable不会返回。
发布于 2011-06-06 21:21:51
get
发布于 2011-06-06 21:22:30
get()是一个阻塞调用-这意味着调用线程会暂停,直到正在运行的线程完成其任务并且结果可用。
Executor负责从队列中获取任务并进行清理,所以答案是“不”--它不是“仍然在队列中”
注意使用100个线程--这是一个非常高的数字。对于一台典型的机器,尝试2到8之间(这取决于等待其他事情的时间,例如I/O -任务的CPU限制越多,应该使用的线程就越少)。
https://stackoverflow.com/questions/6252575
复制相似问题