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

时光怂恿深爱的人放手 提交于 2019-12-19 16:18:12

问题


I am a bit confused with Thread.sleep() method. if Thread.sleep() is a static method, how does two threads know which is put to sleep. For example, in the code below, I have two three Threads main, t and t1. I call Thread.sleep() always. Not t.sleep(). Does it mean Thread.sleep() puts the current Thread to sleep? That means a Thread instance puts to sleep by itself by calling the static method. what if t1 wants to put t to sleep. that shouldn't be possible correct?

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.");
    }

}

回答1:


Does it mean Thread.sleep() puts the current Thread to sleep?

Yes. Only the current thread can do that.

What if t1 wants to put t to sleep. that shouldn't be possible correct?

Right. You can set a volatile boolean flag that will cause another thread to call Thread.sleep(...) but another thread can't cause a thread to 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(...);
 }



回答2:


It can find the current thread from Thread.currentThread(). The current thread only can put itself to sleep.



来源:https://stackoverflow.com/questions/22104283/if-thread-sleep-is-static-how-does-individual-thread-knows-it-is-put-to-sleep

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!