2 回答

TA贡献1812条经验 获得超5个赞
这取决于你如何使用这个类。
使用doPost
控制器中的方法,它对于多个用户来说是线程安全的,因为您new SqlDataset
每次都创建对象。
这意味着它将仅由处理单个请求的线程使用。
您的控制器代码是可重入且线程安全的。
顺便说一句,如果您打算使用您SqlDataset
的单例(例如 Spring bean 等) - 它不是线程安全的。它在流程中使用了实例变量——这意味着SqlDataset
方法不可重入。
想想他们……
private QueryProcessor qp;
每次在getQueryResult()
方法中创建新实例时,您真的需要吗?private ArrayList<String> dataHeader = new ArrayList<>();
当你从它返回时你真的需要getHeaders()
- 为什么不只是在方法内创建新的ArrayList
beforefor
循环。...等等...
如果您将所有内容作为参数传递给方法并返回在方法中创建的所有内容,它将是完全线程安全的。
单例可能只有不可变的实例变量(逻辑上几乎是常量),以保持某些设置或属性适用于使用它的任何线程。

TA贡献1854条经验 获得超8个赞
它SqlDataset.java
本身不是线程安全的,因为其中有实例变量。
但是,如果您仅在某些request controller
方法中使用它,则不会有任何问题。这是因为 aServlet
不是线程安全的,但 Servlets 方法是线程安全的。
添加回答
举报