在我的调试器上花了太多时间之后,我偶然发现了一些我还不清楚的有趣内容。我希望有更多Java经验的人解释并确认这一点:
我不是每次都使用Thread.currentThread().isInterrupted()
,而是将内容缩短为thisThread.isInterrupted()
。我在Runnable实现中将thisThread
声明为private Thread thisThread = Thread.currentThread()
。我很少知道在运行时,thisThread
和Thread.currentThread()
指的是两个不同的东西。第一个"读取" Thread[main,5,main]
,第二个"读取" Thread[Thread-1,5,main]
。
好像Thread.currentThread()
指的是在构造期间构造Runnable实现(main)的线程,并且一旦线程启动它就引用独立的,完全构造的线程。
这是对内部情况的正确解释吗?
我想了解课堂上Thread.currentThread()
的原因。标头与Thread.currentThread()
中的run()
不同。
提前致谢了。
public class Temp implements Runnable {
private Thread thisThread = Thread.currentThread();
public void run() {
while ( !thisThread.isInterrupted() ) {
//[...]
}
}
}
答案 0 :(得分:2)
在构造Runnable期间(到调用构造函数的线程)设置了thisThread
。
run
期间的当前线程将是执行该方法的任何线程。
通常,这是两个不同的主题。
例如:
executorService.submit(new Temp());
这里,调用构造函数的线程将变为thisThread
,但ExecutorService将调用run
方法,该方法可能使用后台线程池。
答案 1 :(得分:1)
实例化Temp
时,从主线程调用构造函数。因此,该值将成为主线程。由于您将其保留在thisThread
中,因此它将始终显示主线程。但是如果你将thisThread
更改为一个函数,无论何时调用它,它都会返回你实际所在的线程。