我正在使用JSP& amp; Jdbc,我有一个表名“COMMENT_DATA”,用户可以在其中发表评论。所以现在如果不止一个用户正在撰写评论并同时发布评论,我会选择线程。所以我将同步将数据插入数据库的方法。然后如何处理其他请求,即如何排队其他请求以及如何收回并使它们写入数据库
答案 0 :(得分:2)
完全。每个HTTP请求本身就是一个线程。请记住,Web容器将在应用程序的生命周期中仅创建一个servlet实例,并且servlet代码已在所有请求之间共享。这意味着将在所有请求之间共享任何类级变量或静态变量。如果你有这样一个变量,它不线程安全。您需要在方法级别声明特定于请求的变量threadlocal。
对于JDBC:只需编写可靠的代码,一切都应该顺利进行。使用连接池仅对提高连接性能有用(这确实值得付出努力,相信我,连接数据库是一项相当昂贵的任务,可能会占用至少200毫秒甚至更多,同时重用池中的连接成本几乎没有)。它只会改变您编写的代码的线程安全性,它仍然在您的控制/手中。为了清楚地了解如何以正确的方式进行基本的JDBC编码,您可能会发现this article很有用。
答案 1 :(得分:1)
如上所述,servlet容器将为您处理请求的线程。即对于每个不同的用户而不是连接到服务器,将在您知道的情况下创建一个新线程。
所以你要做的就是确保你的jdbc代码是线程安全的,你应该没问题。数据库将为您执行所有必要的锁定: - )
卡尔
答案 2 :(得分:0)
我不确定你为什么要担心这个问题。 servlet容器将处理线程(例如,通过线程池)。数据库将处理多个连接,因此如果您不是在应用程序中的不同线程之间修改共享状态,则不必担心这一点。