Servlet 3.0的规范规定(第11.5节):
侦听器实例和线程
[…]
不需要容器将结果通知同步到属性侦听器类。维护状态的侦听器类负责数据的完整性,并应明确处理这种情况。
所以不,代码不安全。使用AtomicCounter或同步对计数器的访问即可对其进行修复。
使它易失并不能使其更安全,因为++不是原子操作。因此,由于易失性,每个其他线程都将看到新值,但是由于竞争条件读取,您可能仍会错过增量,然后并行增加计数器。

Servlet 3.0的规范规定(第11.5节):
侦听器实例和线程
[…]
不需要容器将结果通知同步到属性侦听器类。维护状态的侦听器类负责数据的完整性,并应明确处理这种情况。
所以不,代码不安全。使用AtomicCounter或同步对计数器的访问即可对其进行修复。
使它易失并不能使其更安全,因为++不是原子操作。因此,由于易失性,每个其他线程都将看到新值,但是由于竞争条件读取,您可能仍会错过增量,然后并行增加计数器。