gpt4 book ai didi

java - `Thread.currentThread()` 在构造和运行时不恒定?

转载 作者:行者123 更新时间:2023-12-01 22:26:03 27 4
gpt4 key购买 nike

在我的调试器上花费了太多时间之后,我偶然发现了一些我还不清楚的有趣的东西。我希望有更多 Java 经验的人来解释和确认这一点:

我没有每次都使用Thread.currentThread().isInterrupted(),而是将内容缩短为thisThread.isInterrupted()。我在 Runnable 实现中将 thisThread 声明为 private Thread thisThread = Thread.currentThread()。我几乎不知道在运行时,thisThreadThread.currentThread() 指的是两个不同的东西。第一个“读取”Thread[main,5,main],第二个“读取”Thread[Thread-1,5,main]

Thread.currentThread() 似乎是指在构造期间构造 Runnable 实现(main)的线程,并且在线程启动后它指的是独立的、完全构造的线程。

这是对内部发生的事情的正确解释吗?

我想了解为什么类 header 中的 Thread.currentThread()run() 中的 Thread.currentThread() 不同.

提前致谢。

public class Temp implements Runnable {

private Thread thisThread = Thread.currentThread();

public void run() {

while ( !thisThread.isInterrupted() ) {

//[...]

}

}

}

最佳答案

您的 thisThread 是在构建 Runnable 期间设置的(调用构造函数的线程)。

运行期间的当前线程将是执行该方法的任何线程。

通常,这是两个不同的线程。

例如:

executorService.submit(new Temp());

这里,调用构造函数的线程将成为 thisThread,但 run 方法将由 ExecutorService 调用,ExecutorService 可能会使用后台线程池。

关于java - `Thread.currentThread()` 在构造和运行时不恒定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28777404/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com