线程池如何重用线程以及其工作原理
- 论坛
- 线程池如何重用线程以及其工作原理
17 浏览
线程池如何重用线程以及其工作原理
我对多线程的概念了解不深,正在努力学习。
在Java中,我知道不能多次调用线程:
Thread t = new Thread; //一些Runnable t.start(); t.start(); //非法,运行时会抛出异常。
据我所知,当再次调用t.start()
时会抛出异常,因为一旦线程在run()
方法之外,与线程关联的堆栈就会被销毁,而你正在尝试重新初始化。
在这种情况下,我对线程池的了解是,它提供了更好的性能和节省时间,因为不需要创建新的线程(我在这里读到的)。
如果在线程池场景中不需要创建新的线程,那么它是如何与刚刚完成其运行方法的相同线程一起工作的,那个线程是否可以被再次使用?
我在这里读到,它说“java.util.concurrent中的大多数执行器实现都使用线程池,它由工作线程组成。这种线程与它执行的Runnable和Callable任务分开存在,并且经常用于执行多个任务。”
那么这里的工作线程是什么,它与普通的Java线程有什么不同?
通过这个链接,我有了一些了解,但仍然不清楚使用线程池可以消除哪些东西,以及为什么它比使用普通的Java线程性能更好。
所以我们可以这样说,
线程有三个部分:
- 创建(告诉操作系统它是新线程,为其创建堆栈)。
- 执行具有run()方法的Runnable。
- 销毁线程。
所以,考虑以上三个步骤,使用线程池后,第1步和第3步可以在固定数量的线程创建后消除。每个任务只执行第2步,这就是为什么线程池更快的原因?我们可以这样说吗?我正确吗?