1つのスレッドで別のスレッドのsleepメソッドを呼び出す

import static java.lang.Thread.sleep;
public class send {
    
    
    static  int x;
    public static void  main(String[] agrs) throws InterruptedException {
    
    
        Thread t2 = new Thread(() -> {
    
    
            x=10;
        }, "t2");
        t2.start();
        t2.sleep(2000);
        System.out.println(444);
        System.out.println(x);
    }
}

私の想像では、メインスレッドは2秒待たずに444と0を直接出力します。
しかし、実際には、メインスレッドは2秒待機し、t2スレッドは待機しません。
スリープソースコードを直接見てください

 public static native void sleep(long millis) throws InterruptedException;

それは静的な方法であることが判明しました。したがって、メインスレッドでの呼び出しはt2.sleep実際には同等sleepです。つまり、どのスレッドがsleepを呼び出し、どのスレッドがスリープするかです。
したがって、上記のコードをt2.sleept2スレッドに入れることができます。

以上が私の個人的な意見ですが、何かおかしいことがあれば、遠慮なく教えてください、ありがとうございます!!

おすすめ

転載: blog.csdn.net/qq_43179428/article/details/106801280