单例方法应该同步吗?

时间:2016-07-09 02:26:24

标签: java spring multithreading singleton spring-ioc

我的web-app(这里没有Spring-MVC,只有核心IOC)使用了很多原型bean,而且大多数都使用了单例dao-bean。单例dao-bean方法是否应该同步,因为许多不同的原型bean(来自不同的请求)可能在同一时刻使用相同的方法id dao?

例如,dao方法

return new ResponseEntity<String>(HttpStatus.BAD_REQUEST);

1 个答案:

答案 0 :(得分:0)

取决于。

正如您在评论中所写,您使用的是jdbc。 JDBC API上的所有操作are synchronized并执行auto-commit by default。因此,如果您共享JDBC连接,但您的方法不需要事务(例如,它不会对之前几行选择的数据进行更新),而不需要同步

但是,如果您需要事务,则需要同步此方法或为每个线程提供自己的JDBC连接,如each connection is also a transaction。为此,您可以每次在方法中打开新连接,或者让Spring handle that problem