我正在使用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(),但希望它不是正确的方法!
注意:我不能像通常那样使用静态变量来控制进程来控制线程。
最佳答案
您可以使用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);
}
}