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