我正在使用TimerService创建一个如下所示的计时器:
@Resource
private TimerService timerService = null;
...
Timer timer = timerService.createTimer(timeout * 1000, timerId);
然后在计时器超时期间执行无限循环。
@Timeout
public void callTimeout(Timer timer){
while(true){
// do some process
}
}
有没有办法使用Timer的选项让定时器停止callTimeout()的进程?我已经尝试了 timer.cancel(),但希望它不是正确的方法!
注意:我不能像通常那样控制线程来使用静态变量控制进程。
答案 0 :(得分:0)
您可以使用Timer
启动async方法:
@Startup
@Singleton
class MyEJB {
@Resource
private TimerService timerService = null;
private Future<String> result;
@EJB
private Async asyncTask
...
Timer timer = timerService.createTimer(timeout * 1000, timerId);
@Timeout
public void callTimeout(Timer timer){
result = async.calculate();
}
public void cancel(){
result.cancel();
}
}
@Stateless
class Async {
@Asynchronous
public Future<String> calculate(){
...
return new AsyncResult<String>(status);
}
}