fol*_*one 5 java multithreading exception
完成一个Thread后,你不能再使用start()方法再次运行它:它会抛出异常.谁能解释一下,为什么?这样的架构决策背后的原因是什么?
因为在单独的线程中执行代码的方法不是创建一个线程,该线程链接到什么是线程的系统视图(有关绿色和系统线程之间区别的无穷无尽的细节),而是创建一个Runnable,和让它由一个线程执行.
对于最佳代码(因为创建线程非常耗时),我甚至建议你不要直接让一个线程执行Runnable,而是由ExecutorService执行,这将允许你使用一个线程池而不必烦扰所有这些细节.
线程完成后,使用start()方法无法再次运行它:
更正:Thread.start()
每个实例只能调用一次,任何后续调用都会抛出异常,无论线程是否仍在运行.
在完成运行后允许"重启"(当线程仍在运行时显然是错误)将需要额外的逻辑,并且会阻止运行时释放诸如线程堆栈(这是一个大量的内存)之类的资源,直到实例是垃圾收集; 它现在的方式,一旦线程结束就可以释放.
归档时间: |
|
查看次数: |
2792 次 |
最近记录: |