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