2012-01-25 2 views
2
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

Когда я прокомментирую эту строку, она отлично работает.

Может ли кто-нибудь сказать мне, почему?

+8

'Thread.sleep (250)' сделает поток спящим на 250 мс (1/4 секунды). Он будет печатать что-то на каждые 50 000 итераций. Это означает, что вам придется подождать 50 000/4 = 12 500 секунд (3 часа, 28 минут, 20 секунд), прежде чем что-то распечатает. У вас было столько терпения? – Jesper

ответ

7

Вы понимаете, что вы только печатаете что-то каждые 50000/4 секунды, верно? Вы можете подождать немного дольше. :)

+2

Время уже сейчас - напечатано ли что-нибудь? –

Смежные вопросы