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.sleep
na verdade equivalente sleep
, então qual encadeamento chama o sono, qual encadeamento dorme.
Portanto, o código acima pode ser colocado t2.sleep
no thread t2.
O exposto acima é minha opinião pessoal, se houver algo errado, sinta-se à vontade para me esclarecer, obrigado !!