【发布时间】:2019-04-01 11:40:22
【问题描述】:
我正在学习 Spring 如何支持多线程。我发现 Spring 文档说 JdbcTemplate 是 thread-safe 一旦配置。 人们建议为整个应用程序使用一个 JdbcTemplate 实例,因为它是线程安全的(这意味着不需要为每个类创建一个新实例)。
但是当我查看 JdbcTemplate 代码时,我没有看到任何同步方法、锁或 volatile 变量。它还包含许多实例变量。我的问题是 JdbcTemplate 在这种情况下如何是线程安全的?
【问题讨论】:
-
因为没有状态被保存在实例级别,因此不需要
synchronized方法或对象锁。你看到的实例变量只是委托,用于异常翻译、获取连接等。 -
因为一旦配置好,如果没有人尝试重新配置它,它的状态就永远不会改变。没有共享可变状态 == 线程安全。就像,如果您安全地发布一个简单的 ArrayList 并且从不调用任何修改列表的方法,即使是从多个线程中,它也是线程安全的。
-
@silfrede 您是否阅读了该页面上的答案?答案中标记为已接受的链接导致关闭的春季论坛。
-
接受的答案并不意味着它是最佳答案,只是问题原始发布者接受的答案。第二个答案,更高的投票,基本上回答了你的问题。
标签: java spring multithreading spring-jdbc