这个问题在这里已有答案:
我正在学习Spring如何支持多线程。我发现Spring文档说JdbcTemplate一旦配置就是thread-safe。人们建议在整个应用程序中使用一个JdbcTemplate实例,因为它是线程安全的(这意味着不需要为每个类创建一个新实例)。
但是当我查看JdbcTemplate代码时,我没有看到任何同步方法,锁或volatile变量。它还包含很多实例变量。我的问题是JdbcTemplate在这种情况下如何是线程安全的?
以下是JDBCTemplate Best Practices部分下的Spring参考文档的片段
一旦配置,JdbcTemplate类的实例就是线程安全的。这很重要,因为这意味着您可以配置JdbcTemplate的单个实例,然后将此共享引用安全地注入多个DAO(或存储库)。 JdbcTemplate是有状态的,因为它维护对DataSource的引用,但此状态不是会话状态。
正如文档中清楚解释的那样,您也可以在源代码中看到。此类不具有任何会话状态。它只有配置信息。