【发布时间】:2015-09-30 17:54:04
【问题描述】:
我的结构如下:
然后我多次请求main.java,声明一个变量并在每次调用时递增它,这反映了旧值。我是否遵循正确的方法?为什么不是每次都创建一个新线程?
【问题讨论】:
-
对您发出的每个请求都有一个新请求,尽管请求之间共享一个 SINGLE servlet 实例。要增加一个变量,您必须在请求范围之外声明它。 (即在 Servlet init() 方法中)然后在每次调用 servlet 时递增它。
-
@Down-voter 请随时添加评论和您的意见。如果您需要一些代码或更多规范,请发表评论。
-
@GilesThompson 每次请求都会创建新线程吗?正如您所说的资源,那么它可能会冲突或造成 A、B、C Java 文件的资源不一致?
-
取决于您的 servlet 实现。通常,tomcat 将利用线程池并分配一个新线程来服务您发出的每个请求。然而,所有线程将“看到”同一个 servlet 实例,但会使用自己的数据调用 servlet get 方法,因为每个线程都有自己的堆栈。因此,要使变量对所有线程可见,您必须在方法范围之外声明它,就像我在回答中所做的那样;然后每个线程将能够更新该变量。此外,您可能希望同步对变量的访问以防止损坏。
-
您可以添加代码以便更好地解释