Chame o método de suspensão de outro tópico em um tópico

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

Minha imaginação é: o thread principal imprime diretamente 444 e 0 sem esperar 2s.
Mas a realidade é que o thread principal espera 2s e o thread t2 não espera.
Olhe diretamente para o código-fonte do sono

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

Acabou sendo um método estático. Portanto, chamar o encadeamento principal é t2.sleepna verdade equivalente sleep, então qual encadeamento chama o sono, qual encadeamento dorme.
Portanto, o código acima pode ser colocado t2.sleepno thread t2.

O exposto acima é minha opinião pessoal, se houver algo errado, sinta-se à vontade para me esclarecer, obrigado !!

Acho que você gosta

Origin blog.csdn.net/qq_43179428/article/details/106801280
Recomendado
Clasificación