我需要询问如何实现线程池,以便在每次发生任务提交时执行恒定数量的线程.(在Executor中避免每次线程创建和删除开销)
executor.submit(Runnable)
Run Code Online (Sandbox Code Playgroud)
让我们说我们在开始时创建一些线程,当任务到来时,我们使用任何Queue impl为它们(Thread)分配任务.但是在完成它的任务之后,如果线程的生命周期中的话,线程如何再次返回其池
"执行其run方法后,它进入TERMINATED状态,不能再次使用"
我不明白线程池是如何工作的,因为它有一定数量的线程来执行任何任务到它的队列.
如果有人能够在完成任务后为我提供线程重用的示例,那将是很棒的.
!!提前致谢 .!!
“执行完 run 方法后,它会进入 TERMINATED 状态并且无法再次使用”
它没有完成它run(),而是有一个循环运行您提供的任务的 run() 。
显着简化线程池模式,您的代码如下所示。
final BlockingQueue<Runnable> tasks = new LinkedBlockingQueue<Runnable>();
public void submit(Runnable runs) {
tasks.add(runs);
}
volatile boolean running = true;
// running in each thread in the pool
class RunsRunnable implement Runnable {
public void run() {
while(running) {
Runnable runs = tasks.take();
try {
runs.run();
} catch(Throwable t) {
// handles t
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
在此示例中,您可以看到,当每个任务的 run() 完成时,线程本身的 run() 直到池关闭才完成。
| 归档时间: |
|
| 查看次数: |
4415 次 |
| 最近记录: |