No código abaixo, acionamos duas Threads que contarão até 100 e imprimirão o resultado de 10 em 10.
O que ocorre é que na linha destacada, apesar de parecer estarmos colocando a Thread1 para dormir, na verdade estamos colocando apenas a Thread Main. Por isso a Thread1 tem tempo de executar sua contagerm primeiro, pois a Thread2 não foi acionada ainda pela Thread Main quando “t1.sleep(2000)” ocorre.
Portanto, fica provado que a instrução sleep() faz com que a thread em execução seja pausada no tempo especificado, tanto é que tanto faz: “t1.sleep(2000)”, “t2.sleep(2000)” ou “Thread.sleep(2000)”
import java.lang.Runnable;
public class CounterTest{
public static void main(String args[]){
Counter c1 = new Counter(“Counter1”);
Counter c2 = new Counter(“Counter2”);
Thread t1 = new Thread(c1);
Thread t2 = new Thread(c2);
t1.start();
try {
t1.sleep(2000); // = Thread.sleep(2000)
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(“\tApós 2 segundos”);
t2.start();
}
}
class Counter implements Runnable{
private String name;
public Counter(String name){
this.name = name;
}
@Override
public void run() {
for (int i = 0; i < 101; i++) {
if (i % 10==0){
System.out.println(this.name + ” – “+ i);
}
}
}
}
Output:
Counter1 – 0
Counter1 – 10
Counter1 – 20
Counter1 – 30
Counter1 – 40
Counter1 – 50
Counter1 – 60
Counter1 – 70
Counter1 – 80
Counter1 – 90
Counter1 – 100
Após 2 segundos
Counter2 – 0
Counter2 – 10
Counter2 – 20
Counter2 – 30
Counter2 – 40
Counter2 – 50
Counter2 – 60
Counter2 – 70
Counter2 – 80
Counter2 – 90
Counter2 – 100