2013-04-20 37 views
2

我说的是Thread实例,如果他们获得Runnable作为构造函数参数提供,并且只能执行它们的start方法一次,那么Executor*类系列如何重用它们? PS:我知道并使用比裸线更好抽象的Executors类,我只是出于好奇而问这个问题。java.util.concurrent类如何重用线程?

回答

4

传递给执行程序线程的runnables(让我们称它们为R)事实上被包装在其他runnables(让我们称之为W)中。 W的run()方法的伪代码是

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

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