`
JackyCheng2007
  • 浏览: 249657 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Spring 事务在多线程环境下的传播

阅读更多
有时候需要使用多线程来提高对于CPU,尤其是多核CPU的利用率,来提高性能。Spring的bean一般都是无状态的,单例的。所以也就是线程安全的。那么对于声明式的事务,在多线程环境下又是怎么处理的呢?

看看下面的例子:
ClassA.java
@Transactional
public void methodA(){        
    ExecutorService executorService = Executors.newFixedThreadPool(4);
    executorService.execute(new Runnable() {
        public void run() {
            classB.methodB();
        }
});
}
ClassB.java
@Transactional
public void methodB(){
    updateDB();
}


你认为methodB和methodA的事务是同一个吗?其实不是。Spring的事务是和thread绑定的。由于methodB在另起的一个新的线程中,所以Spring会为其生成一个新的事务。
自然,如果methodA或methodB中因出错而rollback,也是彼此不影响的。
0
0
分享到:
评论
1 楼 bo_hai 2014-08-13  
你说没错。问题是:怎么样把ClassA中的事务传播到ClassB里面去呢?

相关推荐

Global site tag (gtag.js) - Google Analytics