【发布时间】:2009-11-02 05:59:30
【问题描述】:
我正在尝试将文件上传到服务器并将文件的信息存储到 Access 数据库中,是否需要在多个用户的数据库连接时处理线程。如果是怎么办?
【问题讨论】:
我正在尝试将文件上传到服务器并将文件的信息存储到 Access 数据库中,是否需要在多个用户的数据库连接时处理线程。如果是怎么办?
【问题讨论】:
您的网络服务器继承了多线程,这使您无需实现自己的线程来处理上传。 但是请确保多个请求不使用相同的资源(不要将所有上传的文件写入同一个 tmp 文件中,...)
为避免将数据保存到数据库时出现问题,请使用连接池。
所以是的,您需要线程,但如果您的设计很好,那么所有线程都将由您的框架处理
【讨论】:
没错。每个 HTTP 请求本身已经是一个线程。请记住,Web 容器在应用程序的生命周期内只会创建一个 servlet 实例,并且 servlet 代码在所有请求之间共享。这意味着任何类级变量或静态变量都将在所有请求之间共享。如果你有这样一个变量,它是 not 线程安全的。您需要在方法级别声明特定于请求的变量 threadlocal。
至于 JDBC:只需编写可靠的代码,一切都会顺利。使用连接池仅对提高连接性能有用(相信我,这确实值得付出努力,连接数据库是一项相当昂贵的任务,可能至少需要 200 毫秒甚至更多时间,同时重用池中的连接成本几乎没有)。它只是不会改变您编写的代码的线程安全性,它仍然在您的控制/手中。要清楚地了解如何以正确的方式进行基本的 JDBC 编码,您可能会发现 this article 很有用。
【讨论】: