线程池如何重用线程及其工作原理
我的多线程概念很弱,并且试图学习。
在Java中,我所知道的是,我们不能多次调用一个线程:
Thread t = new Thread; //Some Runnable
t.start();
t.start(); //Illegal and throw Exception at runtime.
据我所知,当您再次调用时,它会引发异常,因为一旦线程的关联堆栈脱离方法并且您尝试再次初始化,线程的关联堆栈就会被破坏。t.start()
run()
在这种情况下,我对线程池的了解是,它提供了更好的性能并节省了时间,因为不需要创建新线程(我在本文中阅读)。
如果不需要在线程池场景中创建新线程,那么它如何与刚刚完成其run方法的同一线程一起工作,该线程是否可以再次使用?
我读了这篇文章,它说“java.util.concurrent 中的大多数执行器实现都使用线程池,它由工作线程组成。这种线程与它执行的 Runnable 和 Callable 任务分开存在,通常用于执行多个任务。"
那么这里什么是Worker线程,它与普通的Java线程有什么不同吗?
有了这个链接,我得到了一些东西,但仍然困惑于当我们使用线程池时可以消除什么样的东西,以及为什么它比使用普通的java线程提供更好的性能。
所以我们可以这样说,
螺纹有三个部分,
- 创建(告诉操作系统它是新线程,为其创建堆栈。
- 使用 run() 方法执行 Runnable。
- 破坏线程。
因此,考虑到以上3个步骤,使用线程池步骤1和步骤3可以在固定数量的线程创建后消除。每个任务只有步骤2才会被执行,这就是为什么线程池更快吗?我们能这样说吗?我说的对吗?