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



在处理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元素。

最新更新