class SelfishRunner extends Thread{
private int tick = 1;
private int num ;
public SelfishRunner(int x){
this.num = x;
}
@Override
public void run(){
try{
while(tick < 400000){
Thread.sleep(250);
if((tick%50000) == 0){
System.out.println(" Thread# "+num+","+Thread.currentThread().getName()+", tick "+tick);
}
tick++;
}
}catch(Exception e){
System.out.println(e);
}
}
}
public class RaceDemo{
private final static int NUMRUNNERS = 2;
public static void main(String[] args){
SelfishRunner[] runners = new SelfishRunner[NUMRUNNERS];
for(int x=0,y=1; x < NUMRUNNERS; x++){
runners[x] = new SelfishRunner(x);
runners[x].setPriority(y++);
}
runners[0].setName("JEEPERS");
runners[1].setName("KREEPERS");
for(int x=0; x < NUMRUNNERS; x++){
runners[x].start();
}
}
}
Приведенный выше код пытается создать условия гонки, но в SelfRunner.run
призыв к выполнению программы Thread.sleep(250)
привалах без вывода на печать в командной строке.метод Thread.sleep останавливает поток permenantly
Когда я прокомментирую эту строку, она отлично работает.
Может ли кто-нибудь сказать мне, почему?
'Thread.sleep (250)' сделает поток спящим на 250 мс (1/4 секунды). Он будет печатать что-то на каждые 50 000 итераций. Это означает, что вам придется подождать 50 000/4 = 12 500 секунд (3 часа, 28 минут, 20 секунд), прежде чем что-то распечатает. У вас было столько терпения? – Jesper