gpt4 book ai didi

java - Threadpool 如何重用线程以及它是如何工作的

转载 作者:IT老高 更新时间:2023-10-28 20:44:23 25 4
gpt4 key购买 nike

我的多线程概念很薄弱,正在努力学习。

据我所知,在 Java 中,我们不能多次调用线程:

Thread t = new Thread; //Some Runnable
t.start();

t.start(); //Illegal and throw Exception at runtime.

据我所知,当你再次调用 t.start() 时它会抛出异常,因为线程的关联堆栈一旦退出 run() 就会被销毁code> 方法,你正在尝试再次初始化。

在这种情况下,我对线程池的了解是,它可以提供更好的性能并节省时间,因为不需要创建新线程(我在 this 中读到)。

如果在线程池场景中不需要创建新线程,那么它如何与刚刚完成其运行方法的同一个线程一起工作,该线程是否可以再次使用?

我读过 this ,并且它说“java.util.concurrent 中的大多数执行器实现都使用线程池,它由工作线程组成。这种线程与其执行的 Runnable 和 Callable 任务分开存在,并且通常用于执行多个任务。"

那么这里的 Worker 线程是什么,它和普通的 Java 线程有什么不同吗?

this链接,我得到了一些东西,但仍然对使用线程池时可以消除哪些东西以及为什么它比使用普通 java 线程提供更好的性能感到困惑。

所以我们可以这样说,

线程分为三个部分,

  1. 创建(告诉操作系统它是新线程,为其创建堆栈。)
  2. 使用 run() 方法执行 Runnable。
  3. 销毁线程。

因此,考虑到以上 3 个步骤,线程池的第 1 步和第 3 步可以在创建固定数量的线程后消除。每个任务只会执行第 2 步,这就是为什么线程池更快?我们可以这样说吗?我说的对吗?

最佳答案

If there is no need to create new Thread in ThreadPool scenario, then how it works with same thread which just finished its run method, will that Thread can be used again?

简单 - 原始线程从未真正完成。它只是等待另一个任务执行。在伪代码中:

// No, this isn't even slightly accurate! General impression only :)
while (!pool.isShutdown()) {
Runnable task = pool.waitForTaskOnQueue();
task.run();
}

(很明显,当线程池关闭时,它也需要停止等待线程等待另一个任务 - 但希望您能大致了解。)

关于java - Threadpool 如何重用线程以及它是如何工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19765904/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com