Метод Thread.sleep останавливает поток постоянно - PullRequest
2 голосов
/ 25 января 2012
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) останавливает выполнение программы без вывода вывода на печать в командной строке.

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

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

1 Ответ

7 голосов
/ 25 января 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...