我在我的应用程序中使用EJB计时器,但只要我检查计时器状态,应用程序就会挂起。
复制此方案的场景如下:
1)启动计时器。
2)在超时方法中,调用另一个类方法并在那里睡30分钟。
3)在30分钟到期之前,通过调用以下方法检查计时器状态。
public String getTimerStatus() {
String returnStatus = "Stopped";
for (Object obj : timerService.getTimers()) {
Timer t = (Timer) obj;
try {
String scheduled = (String) t.getInfo();
if (scheduled.equals(TIMER_NAME)) {
returnStatus = "Running";
}
} catch (Exception e) {
e.printStackTrace();
}
}
return returnStatus;
}
4)当调用t.getInfo()方法时,应用程序挂起,如上所示。
请让我知道此问题的任何解决方案。
答案 0 :(得分:0)
我的想法是t.getInfo()已同步或尝试以另一种方式获取锁定。你能提供超时方法的代码以及它调用的其他类方法吗?你使用同步吗?