线程池如何重用线程以及其工作原理

17 浏览
0 Comments

线程池如何重用线程以及其工作原理

我对多线程的概念了解不深,正在努力学习。

在Java中,我知道不能多次调用线程:

Thread t = new Thread; //一些Runnable
t.start();
t.start(); //非法,运行时会抛出异常。

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

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

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

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

那么这里的工作线程是什么,它与普通的Java线程有什么不同?

通过这个链接,我有了一些了解,但仍然不清楚使用线程池可以消除哪些东西,以及为什么它比使用普通的Java线程性能更好。

所以我们可以这样说,

线程有三个部分:

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

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

0