在java中执行后,如何为下一个任务保存线程(线程池的实现)

Vir*_*dra 5 java threadpool

我需要询问如何实现线程池,以便在每次发生任务提交时执行恒定数量的线程.(在Executor中避免每次线程创建和删除开销)

executor.submit(Runnable)
Run Code Online (Sandbox Code Playgroud)

让我们说我们在开始时创建一些线程,当任务到来时,我们使用任何Queue impl为它们(Thread)分配任务.但是在完成它的任务之后,如果线程的生命周期中的话,线程如何再次返回其池

"执行其run方法后,它进入TERMINATED状态,不能再次使用"

我不明白线程池是如何工作的,因为它有一定数量的线程来执行任何任务到它的队列.

如果有人能够在完成任务后为我提供线程重用的示例,那将是很棒的.

!!提前致谢 .!!

Pet*_*rey 3

“执行完 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() 直到池关闭才完成。