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

第二个参数是您作为 0 传递的初始延迟,因此它会立即执行它,传递 60000 秒让它等待一分钟然后发送。

由于您只希望它只发送一次使用,请致电Timer.schedule(TimerTask task, long delay)

无关:

您应该考虑使用ScheduledExecutorService而不是Timer. 请参阅Oracle 教程

于 2012-05-22T17:59:28.057 回答
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 回答
1

你有一个额外的零。

您所调用的是Delayed with a Fixed-Delay Repeat Execution,而您想要的是Single Delay Non Repeat execution

于 2012-05-22T17:58:54.737 回答