-4

IS ATimerTaskであり、Thread. この考えに間違いはないと思います。私がそれを行っている理由は、私の投稿の「望ましい出力」セクションに記載されています

Java クラスは 2 つのクラスから継承できません。では、どうすればこの問題を解決できますか?

その理由は、私の質問で言及した投稿にあります。

実際の出力: すべてのタイマー タスクはメイン メソッドで実行されます。すべてのタイマー タスクが実行される前に、メイン コードの最後の print ステートメントが表示されます。私はそれをしたくありません。

期待される出力: main の end print ステートメントを他のすべての後に配置したい。

4

4 に答える 4

9

TimerTask を拡張して Runnable を実装する

元の問題を再度述べた後に編集: https://stackoverflow.com/a/4951059/869488を確認してください。

于 2013-03-11T09:07:50.327 に答える
5

あなたは間違った質問をしています。Java では多重継承はできませんが、それは実際の目標ではありません。

必要なのは、複数の時間指定タスクが完了するのを待つ機能です。それを達成する方法はいくつかあります。

おそらく最も簡単な方法は、 を使用することです。これにより、慣れ親しんだ方法と同様の方法で、待機できるScheduledExecutionServiceが得られます。Futurejoin

もう 1 つの方法は、 a を使用しCountDownLatchて、各タイマー タスクが完了したときにラッチをデクリメントすることです。その後、 を使用して終了するのを待つことができますawait

さらに別の方法として、waitおよびnotifyプリミティブを使用して自分で同期を構築する方法があります。この方法でも問題に対処するのは難しくありません。

于 2013-03-11T09:44:53.970 に答える
2

必要なデザインは Java でサポートされていません。

サポートされている設計は、スレッドに参加する代わりにwaitandを使用することです (これはできません)。このSOの質問の下にある例:Javaでwait()およびnotify()メソッドを示す良い小さな例notifyTimerTask

于 2013-03-11T09:37:50.257 に答える
1

Runnableを実装できます。

class BulbJob extends TimerTask implements Runnable
{

    public void run()
   {

   }
}
于 2013-03-11T09:09:43.467 に答える