【发布时间】:2014-02-24 17:32:06
【问题描述】:
直接来自这个documentation:
在多线程应用程序中,可能会发生属性更改 同时地。 servlet 容器不需要 同步生成的通知;监听器类 他们自己负责在这样的情况下维护数据完整性 情况。
据我所知,所有或大多数应用程序都是多线程的,因为 Web 服务器会为每个客户端的请求创建一个新线程。该段只是说如果有一些共享的可写资源我们需要同步对吗?
提前致谢。
【问题讨论】:
直接来自这个documentation:
在多线程应用程序中,可能会发生属性更改 同时地。 servlet 容器不需要 同步生成的通知;监听器类 他们自己负责在这样的情况下维护数据完整性 情况。
据我所知,所有或大多数应用程序都是多线程的,因为 Web 服务器会为每个客户端的请求创建一个新线程。该段只是说如果有一些共享的可写资源我们需要同步对吗?
提前致谢。
【问题讨论】:
取决于属性更改的频率以及可写资源是否可能具有不希望的状态。
如果两个通知几乎同时到达侦听器,同步不保证侦听器处理通知的顺序(请参阅this 答案)。这可能会导致可写资源达到不希望的状态(例如,在添加之前处理删除)。在这种情况下,您将需要像fair lock 这样的东西,这是有代价的:侦听器将在给定时间内处理更少的通知。如果这是一个问题,您可以尝试使可写资源本身是线程安全的,例如使用ConcurrentHashMap。
【讨论】: