2016-08-31 2 views
-1

У меня проблема с таймером в java. Когда я запускаю приведенный ниже код, a.start (0), a.start (1) и a.start (2) печатаются одновременно, а вывод похож на 02121010120010122012102 , но я хочу, чтобы его печатали в порядке, таком как 00000001111111222222222Почему команды таймера работают одновременно в java

Как это сделать?

public class Main { 

public static void main(String[] args) { 

    A a = new A(); 
    a.start(0); 
    a.start(1); 
    a.start(2);  
} 

public class A { 

public void start(int x) 
{ 
    Timer myTimer=new Timer(); 
    TimerTask task=new TimerTask() { 
     int counter=0; 
      @Override 
      public void run() { 
        System.out.print(x); 
        counter++; 
        if(counter>=10) 
         myTimer.cancel(); 
      } 
    }; 

    myTimer.schedule(task,0,300); 
} 

}

+6

И почему вы думаете, что эти таймеры должны ждать друг друга? – Tom

+0

Все три таймера запланированы одновременно. Это означает, что они должны бежать, как они делают для вас. – Slimu

ответ

0

Вы можете сделать это с помощью синхронизированного блока кода. Попробуйте

public void run() { 
    synchronized(this) { 
     System.out.print(x); 
     counter++; 
     if(counter>=10) 
      myTimer.cancel(); 
     } 
    } 
} 
+0

это не исправить проблему – tntnt44

1

У вас есть три задачи; и идея состоит в том, что они работают независимо друг от друга. Если вы хотите, чтобы они как-то «синхронизировались»; то хорошо, вам нужно использовать некоторую синхронизацию формы.

Есть много способов добраться туда. Объекты в Java могут использовать wait/notify для создания такой логики; или они могут использовать некоторую форму объекта очереди для «обмена» такой информацией.

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