在循环中创建javax.ejb.Timers是否安全

时间:2014-10-14 11:13:34

标签: java-ee ejb

它是否安全"在处理javax.ejb.Timer(s)

时编写以下代码
Timer timer = null;

for (Object object  : timerService.getTimers()) {               

  timer = (Timer)object;

  timer.cancel();
  timer = timerService.createTimer(timerStatupInterval, timerInterval, timerName);

}

我关心的是getTimers()调用从循环中返回新创建的计时器

那会不会发生?

1 个答案:

答案 0 :(得分:1)

  

在循环中创建javax.ejb.Timers是否安全?

不,请记住,java.util包中Collection接口的不同实现不允许在创建迭代器后修改列表结构,当列表结构被修改时,这种迭代器被调用({ {3}})会抛出fail-fast

根据规范,getAllTimer()方法返回一个java.util.Collection,因此,我们可以假设列表结构没有被修改。

  

我关心的是getTimers()调用从循环内返回新创建的计时器   会发生什么事吗?

仍然有可能getAllTimer()实现不修改列表结构,(可能是在不同的集合中创建新的Timer实例),但如果是这种情况,您可以确定 当前循环迭代器不会看到新的集合元素。