当前位置: 代码迷 >> J2EE >> JdbcTemplate是线程安全的吗?解决方案
  详细解决方案

JdbcTemplate是线程安全的吗?解决方案

热度:11   发布时间:2016-04-17 23:10:43.0
JdbcTemplate是线程安全的吗?

@Component
public class TopicService 
{
@Autowired
private JdbcTemplate topicDao;

public int incReadCount(Integer id)
{
return topicDao.update("update topics set read_count = read_count + 1 where tid = " + id);
}
}


请问,这个incReadCount方法是线程安全的吗?JdbcTemplate 又是线程安全的吗?
------解决思路----------------------
没有共享数据,就是线程安全的,这个应该也是线程安全的。
------解决思路----------------------
引用:
Quote: 引用:

没有共享数据,就是线程安全的,这个应该也是线程安全的。


incReadCount方法有共享变量:TopicDao

dao中如果没有成员变量,也是线程安全的,而且一般dao里也不会定义成员变量
------解决思路----------------------
JdbcTemplate用了ThreadLocal,使各线程能够保持各自独立的一个对象,其实就是一个变量副本,实现了线程安全。
JdbcTemplate类的实例是线程安全的实例。这一点非常重要,正因为如此,你可以配置一个简单的JdbcTemplate实例,并将这个“共享的”、“安全的”实例注入到不同的DAO类中去。 另外, JdbcTemplate 是有状态的,因为他所维护的DataSource 实例是有状态的,但是这种状态是无法变化的。 
    一旦JdbcTemplate被创建,他是一个线程安全的对象。 一个你需要创建多次JdbcTemplate实例的理由可能在于,你的应用需要访问多个不同的数据库,从而需要不同的DataSources来创建不同的JdbcTemplates实例。 
  相关解决方案