如果Thread.sleep是静态的,那么各个线程如何知道它被置于睡眠状态?

我对Thread.sleep()方法有点困惑。 如果Thread.sleep()是一个静态方法,两个线程如何知道哪个线程进入hibernate状态。 例如,在下面的代码中,我有两个三个Threads maintt1 。 我总是调用Thread.sleep() 。 不是t.sleep() 。 这是否意味着Thread.sleep()将当前线程置于睡眠状态? 这意味着Thread实例通过调用静态方法自行进入hibernate状态。 如果t1想要睡觉怎么办? 那应该不可能正确吗?

 public class ThreadInterrupt { public static void main(String[] args) throws InterruptedException { System.out.println("Starting."); Thread t = new Thread(new Runnable(){ @Override public void run() { Random ran = new Random(); for (int i = 0; i < 1E8; i++) { try { Thread.sleep(100); } catch (InterruptedException e) { System.out.println("we have been interrupted"); e.printStackTrace(); } }); Thread t2 = new Thread(new Runnable() { public void run() { //some stuff } }); t.start(); t2.start(); Thread.sleep(500); t.interrupt(); t.join(); System.out.println("Finished."); } } 

这是否意味着Thread.sleep()将当前线程置于睡眠状态?

是。 只有当前线程可以做到这一点。

如果t1想要睡觉怎么办? 那应该不可能正确吗?

对。 您可以设置一个volatile boolean标志,该标志将导致另一个线程调用Thread.sleep(...)但另一个线程不能导致线程hibernate。

  volatile boolean shouldSleep = false; ... // check this flag that might be set by another thread to see if I should sleep if (shouldSleep) { Thread.sleep(...); } 

它可以从Thread.currentThread()找到当前线程。 当前线程只能让自己进入睡眠状态。