Ste*_*fan 1 java multithreading
我想从方法 currentThread() 的 doc 开始:
- 返回对当前正在执行的线程对象的引用。
- @return 当前正在执行的线程。
现在知道这一点,这是有道理的方法,如join(),isAlive(),getName(),isInterrupted()等被称为像这样,例如Thread.currentThread().join。
我的问题是我们如何不需要currentThread 前缀调用方法,例如sleep(),yield(),interrupted()等?例如,当没有实例时,静态调用如何Thread.sleep()确切知道我们“针对”哪个线程实例?
当没有实例时,静态调用例如 Thread.sleep() 如何确切知道我们“针对”哪个线程实例?
它们的目标是当前正在执行的线程。
来自Thread的文档:
使当前正在执行的线程休眠
对于文档yield和interrupted等还提到,它们会影响当前线程。
至于有关的评论join,getName等等:
join静态化是没有意义的。如果这样做,您可以加入的唯一线程将是当前线程,这将立即死锁。您会要求当前线程等待自身。join必须是非静态的,所以你可以告诉它要等待哪个线程(好吧,你可以有,static join(Thread threadToJoin)但这很麻烦)。
休眠和让出仅在静态上有意义 - 您永远不会告诉另一个线程休眠或让出(您不知道另一个线程在做什么 - 它可能不会处于休眠或让出的合理状态)。你只想让自己入睡。
您在评论中提到的其他方法可能具有静态变体,但对它们来说非静态更有意义,因为它们提供有关调用它们的特定 Thread 对象的信息。您可能会注意到interruptedandisInterrupted分别是静态的和非静态的,因此在某些情况下提供两者是有意义的。是否值得拥有一个静态getCurrentThreadName()方法?可能不是。我们不经常查找线程名称,但是检查中断是一个非常常见的操作,因此不必说的便利Thread.currentThread().isInterrupted()超过了维护两种方法的成本。