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