gpt4 book ai didi

java - Thread类的方法与Thread.currentThread()所使用的方法之间的区别?

转载 作者:行者123 更新时间:2023-12-03 13:15:11 29 4
gpt4 key购买 nike

我想从方法currentThread()中的doc开始:

  • Returns a reference to the currently executing thread object.
  • @return the currently executing thread.

现在知道了这一点,就可以像这样调用 join(),像 isAlive()getName()isInterrupted()Thread.currentThread().join方法,这是有道理的。
我的问题是,我们如何不需要 currentThread 前缀来调用 方法,例如 sleep()yield()interrupted()等?当没有 实例时,如何通过 静态调用例如 Thread.sleep()来确切地知道我们将“ ”线程实例定位为“目标”?

最佳答案

How can static call for example Thread.sleep() know exactly what thread instance are we 'targeting' when there is no instance?


它们针对当前正在执行的线程。
Thread的文档中:

Causes the currently executing thread to sleep

yieldinterrupted等文档也提到它们会影响当前线程。
关于 joingetName等的评论:
join设为静态是没有意义的。如果这样做,则您可以加入的唯一线程将是当前线程,该线程将立即死锁。您可能会要求当前线程等待自身。 join必须是非静态的,因此您可以告诉它要等待哪个线程(好的,您可以使用 static join(Thread threadToJoin),但这很麻烦)。
sleep 和yield仅在静态上有意义-您永远不会告诉另一个线程 sleep 或yield(您不知道另一个线程在做什么- sleep 或yield可能不处于明智的状态)。您只想让自己休眠。
您在注释中提到的其他方法可能具有静态变体,但是将它们设为非静态更有意义,因为它们提供了有关所调用的特定Thread对象的信息。您可能会注意到 interruptedisInterrupted分别是静态的和非静态的,因此在某些情况下同时提供两者都是有意义的。值得拥有静态的 getCurrentThreadName()方法吗?可能不是。我们不经常查找线程名称,但是检查中断是非常常见的操作,因此不必说 Thread.currentThread().isInterrupted()的便利性就超过了维护两种方法的代价。

关于java - Thread类的方法与Thread.currentThread()所使用的方法之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63929869/

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