我对Thread.sleep()
方法感到困惑。如果Thread.sleep()
是一个静态方法,那么两个线程如何知道哪个线程处于休眠状态。例如,在下面的代码中,我有两个Threads
main
,t
和t1
。我总是打电话给Thread.sleep()
。不是t.sleep()
。这是否意味着Thread.sleep()将当前线程置于睡眠状态?这意味着Thread实例通过调用静态方法自行进入休眠状态。如果t1想让t
进入睡眠状态怎么办?那不可能是正确的吗?
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.");
}
}
答案 0 :(得分:9)
是否意味着Thread.sleep()将当前线程置于休眠状态?
是。只有当前的线程可以做到这一点。
如果t1想要睡觉怎么办?那不可能是正确的吗?
右。您可以设置一个volatile boolean
标志,该标志将导致另一个线程调用Thread.sleep(...)
,但另一个线程不能导致线程休眠。
volatile boolean shouldSleep = false;
...
// check this flag that might be set by another thread to see if I should sleep
if (shouldSleep) {
Thread.sleep(...);
}
答案 1 :(得分:0)
它可以从Thread.currentThread()
找到当前的帖子。当前线程只能让自己入睡。