在处理javax.ejb.Timer 时对以下内容进行编码是否"安全"
Timer timer = null;
for (Object object : timerService.getTimers()) {
timer = (Timer)object;
timer.cancel();
timer = timerService.createTimer(timerStatupInterval, timerInterval, timerName);
}
我关心的是getTimers()调用从循环中返回新创建的计时器
这会发生吗?
在循环中创建javax.ejb.Timers是否安全?
不,请记住java.util包中Collection接口的不同实现不允许在创建迭代器后修改列表结构,当修改列表结构时,这种名为(fail-fast)的迭代器将抛出ConcurrentModificationException。
根据规范,getAllTimer()方法返回一个java.util.Collection,因此,我们可以假设列表结构没有被修改。
我关心的是getTimers()调用从循环中返回新创建的计时器这会发生吗?
getAllTimer()实现仍然有可能不修改列表结构(可能是在不同的集合中创建了新的Timer实例),但如果是这样的话,您可以确信当前循环迭代器将看不到新的collection元素。