Почему некоторые из моих таймеров вообще не выполняют свои задачи? - PullRequest
2 голосов
/ 13 сентября 2011

Я разрабатываю многозадачный проект.

Прежде всего, я проектирую несколько расширенных классов TimerTask и переопределяю метод run (). В методе run () будет напечатана строка с текущим временем.

Во-вторых, таймер инициализируется следующим образом.

......
DataTask task1 = new DataTask();
myTaskList.add(task1);
DataTask task2 = new DataTask();
myTaskList.add(task2);
DataTask task3 = new DataTask();
myTaskList.add(task3);
DataTask task4 = new DataTask();
myTaskList.add(task4);

for(TimerTask task : myTaskList)
{
    Timer timer = new Timer();
    timer.schedule(task,1,60*1000);
}

......

public class DataTask extends TimerTask
{
     @override
     public void run()
     {
           System.out.println("print sth");
     }

}

Одна задача в одной теме. Это верно?

Иногда задачи работают, однако иногда задачи ничего не печатают без каких-либо исключений, пока поток еще жив.

В чем может быть причина этого?

1 Ответ

0 голосов
/ 13 сентября 2011

Одна задача в одном потоке.Это верно?

Нет, под капотом Timer использует один поток для планирования отправленных задач, но в вашем случае, так как вы используете несколько таймеров, да, каждая задача будет выполняться вотдельная тема.Если у вас есть требование для запуска нескольких задач с использованием нескольких потоков, посмотрите на Executors в параллельном пакете.Посмотрите на Javadoc класса ExecutorService для примеров.

...