【发布时间】:2016-05-25 02:08:06
【问题描述】:
我正在开发一个 Web 应用程序,其中名为 CheckURL 的 servlet 将在其 init 方法中从 xml 文件中读取一些数据,并将该 xml 中的节点列表放入 servletcontext 中。因此,到达此 servlet 的每个请求都不必一次又一次地从 xml 中读取数据。它可以从 servletcontext 中获取节点列表。应用程序中有另一个 servlet 用于更新 xml,如果更新了 xml,我将更新 servletcontext nodelist 变量。
因此,在这种情况下,我希望进行同步以确保在写入 xml 时,应阻止从 servletcontext 节点列表中读取的任何内容。如果不是,它可能正在读取不是最新的数据。
为了实现这一点,我想知道我应该使用哪个同步级别。我应该在 servletcontext 对象上同步,还是应该在 servlet 上下文中的元素集上同步,或者我应该在 servlet 类实例上同步。
【问题讨论】:
-
在
ServetContext上同步。 -
@EJP 我想知道,在我看来,在 servletcontext 上同步会减慢应用程序的速度。由于 servletcontext 对象可能也已被其他 servlet 使用,并且我对 nodelist 的读取或写入操作不应阻止对存储在 servlet 上下文中的其他变量的读取和写入。
-
你想多了。它只会显示应用程序中也在同一事物上同步的那些部分,并且仅显示在同步块中花费的时间量。更新上下文变量真正需要多长时间?
标签: java mysql multithreading jakarta-ee concurrency