2

私はマルチタイマータスクプロジェクトを開発しています。

まず、TimerTaskを拡張したいくつかのクラスを設計し、run()メソッドをオーバーライドします。run()メソッドでは、1行に現在の時刻が出力されます。

次に、タイマーはこのように初期化されます。

......
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つのスレッドで1つのタスク。そうですか?

タスクが機能する場合もありますが、スレッドがまだ生きている間、タスクは例外なしに何も出力しない場合があります。

これの理由は何でしょうか?

4

1 に答える 1

0

1つのスレッドで1つのタスク。そうですか?

いいえ、内部では、Timerは送信されたタスクをスケジュールするために単一のスレッドを利用しますが、あなたの場合、複数のタイマーを使用しているため、はい、すべてのタスクは別々のスレッドで実行されます。複数のスレッドを利用して複数のタスクを実行する必要がある場合は、並行パッケージのエグゼキューターを調べてください。例については、 ExecutorServiceクラスのJavadocを調べてください。

于 2011-09-13T05:55:56.080 に答える