簡體   English   中英

如果Thread.sleep是靜態的,那么各個線程如何知道它被置於睡眠狀態?

[英]if Thread.sleep is static, how does individual thread knows it is put to sleep?

我對Thread.sleep()方法有點困惑。 如果Thread.sleep()是一個靜態方法,兩個線程如何知道哪些線程進入休眠狀態。 例如,在下面的代碼中,我有兩個三個Threads maintt1 我總是調用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM