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.sleep
t2スレッドに入れることができます。
以上が私の個人的な意見ですが、何かおかしいことがあれば、遠慮なく教えてください、ありがとうございます!!