0

次のコードで問題が発生しています。

//Send Creation email
ListServDAO.sendCreateEmail(orgId, full, request.getSession().getServletContext());
//Force a 1 minute pause
       Timer timer = new Timer();
       timer.schedule(new TimerTask() {
            public void run() {
                //Send add members email
                ListServDAO.sendAddMembersEmail(orgId, request.getSession().getServletContext());
                }
            }, 0, 60 * 1000);

sendAddMembersEmail関数は、sendCreateEmail関数の呼び出し後、送信を1分間待機しません。Java APIを読んだ後でも、なぜ待機しないのかわかりません。メールの送信を待っている間、ユーザーがアプリケーションを使用できるようにしたいので、Thread.sleepメソッドを使用したくありません。

4

4 に答える 4

2

繰り返しメールを送信するつもりですか?そうでない場合、なぜ2時間かかる方法を使用しているのですか(つまり、「このタスクを<period>ミリ秒ごとに繰り返し実行する」)。このschedule(task, delay)方法を使用します(ゼロ以外の遅延を使用します)。

于 2012-05-22T17:58:08.973 に答える
2

2番目のパラメーターは、0として渡す初期遅延であるため、その場で実行し、60000秒を渡して、1分間待機してから送信します。

一度だけ送信したいので、Timer.schedule(TimerTask task, long delay)

オフトピック:

の代わりにScheduledExecutorServiceの使用を検討する必要がありTimerます。Oracleチュートリアルを参照してください。

于 2012-05-22T17:59:28.057 に答える
1

余分なゼロがあります。

あなたが呼んでいるのは固定遅延リピート実行による遅延であり、あなたが望むのは単一遅延非リピート実行です。

于 2012-05-22T17:58:54.737 に答える
1

パラメータの順序が間違っています:

    schedule(TimerTask task, long delay, long period) 
      Schedules the specified task for repeated fixed-delay execution, beginning after the specified delay.

0と60*1000を交換します。

于 2012-05-22T18:00:36.340 に答える