如果Thread.sleep是静态的,那么各个线程如何知道它被置于睡眠状态?
我对Thread.sleep()
方法有点困惑。 如果Thread.sleep()
是一个静态方法,两个线程如何知道哪个线程进入hibernate状态。 例如,在下面的代码中,我有两个三个Threads
main
, t
和t1
。 我总是调用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()
找到当前线程。 当前线程只能让自己进入睡眠状态。