2

我说的是Thread实例,如果它们将它们Runnable作为构造函数参数提供并且您只能执行它们的start方法一次,那么Executor*类族如何重用它们?

PS:我知道并使用比裸线程更好的抽象的 Executors 类,我只是出于好奇而问这个问题。

4

1 回答 1

4

传递给执行器线程的可运行对象(我们称它们为 R)实际上被包装在其他可运行对象中(我们称它们为 W)。W 的 run() 方法的伪代码是

while (threadMustRun) {
    wait for new R to be submitted and assigned to this thread
    execute R.run()
}

它实际上比这更复杂,但你应该明白这一点。要真正理解它的作用,请查看ThreadPoolExecutor.Worker内部类的代码。

于 2013-04-20T22:02:52.353 回答