[英]if Thread.sleep is static, how does individual thread knows it is put to sleep?
我對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.");
}
}
這是否意味着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(...);
}
它可以從Thread.currentThread()
找到當前線程。 當前線程只能讓自己進入睡眠狀態。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.