线程只运行一次

fol*_*one 5 java multithreading exception

完成一个Thread后,你不能再使用start()方法再次运行它:它会抛出异常.谁能解释一下,为什么?这样的架构决策背后的原因是什么?

Rid*_*del 7

因为在单独的线程中执行代码的方法不是创建一个线程,该线程链接到什么是线程的系统视图(有关绿色和系统线程之间区别的无穷无尽的细节),而是创建一个Runnable,和让它由一个线程执行.

对于最佳代码(因为创建线程非常耗时),我甚至建议你不要直接让一个线程执行Runnable,而是由ExecutorService执行,这将允许你使用一个线程池而不必烦扰所有这些细节.


Mic*_*rdt 5

线程完成后,使用start()方法无法再次运行它:

更正:Thread.start()每个实例只能调用一次,任何后续调用都会抛出异常,无论线程是否仍在运行.

在完成运行后允许"重启"(当线程仍在运行时显然是错误)将需要额外的逻辑,并且会阻止运行时释放诸如线程堆栈(这是一个大量的内存)之类的资源,直到实例是垃圾收集; 它现在的方式,一旦线程结束就可以释放.