Java:线程池如何将线程映射到runnables

试图了解Java并发性,并且很难理解线程池,线程和正在执行的可运行“任务”之间的关系 .

如果我创建一个带有10个线程的线程池,那么我是否必须将相同的任务传递给池中的每个线程,或者池化线程是否只是与任务无关的“工作者无人机”可用于执行任何任务?

无论哪种方式,Executor / ExecutorService如何将正确的任务分配给正确的线程?

回答(2)

2 years ago

通常,线程池使用一个 生产环境 者 - 消费者队列实现,所有池线程都在等待任务 . Executor不必分配任务,它所要做的就是将它们推送到队列中 . 某个线程,一个“与任务无关的工作人员无人机”,将弹出任务,执行其'run()'方法,并在完成后循环再次等待队列以进行更多工作 .

2 years ago

如果我用10个线程创建一个线程池,那么我是否必须将相同的任务传递给池中的每个线程,或者池化线程是否只是与任务无关的“工作者无人机”可用于执行任何任务?

或多或少后者 . 任何给定的任务都被分配给下一个可用的线程 .

无论哪种方式,Executor / ExecutorService如何将正确的任务分配给正确的线程?

没有"right"线程这样的东西 . 需要设计任务(即 Runnable ),以便哪个线程运行它并不重要 . 这通常不是问题...假设您的应用程序正确地同步对多个线程可能使用的数据的访问/更新 .