日期:2014-05-20  浏览次数:20843 次

"事务"和"同步"之间究竟有什么不同,有什么联系
"事务"和"同步"之间究竟有什么不同,有什么联系

1.事务
//begin transaction
code1;
code2;
//end transaction commit or rollback

2.同步
synchronized(object){
//start
code1;
code2;
//end
}

------解决方案--------------------
实务是指数据库操作,多个操作可以捆绑为一个事务,如果提交成功,事务中的多个操作都成功,如果回滚,那么事务中的多个操作都取消!
同步是只同步代码块中的代码同一时刻只有一个对象可以执行,其他的对象想要进入必须等到锁!
------解决方案--------------------
2者是完全不相关的。如果硬要说2者之间的联系,那可以这样说:2者都是“原子”的概念,即“不可分”。

事务transaction的概念最早引入是在数据库中,
比如一次从A账户到B账户的转账100元操作,涉及到2个动作:(1)从A账户扣100,(2)B账户加100。
这2个动作要么一起成功,要么一起失败(等于不做),绝对不能做成功一半。
数据库就把这2个动作当成“原子”,即一个“事务transaction”。
当然随着技术的发展,transaction已经不再是数据库操作这么简单了。它有很多衍生的外延定义。

而同步synchronized是伴随“线程Thread”产生的概念,多线程同时操作同一个资源,可能引发数据冲突。
比如一个线程往一个List加入数据,另一个线程删除数据,这样尽可能导致List中的数据混乱。
因此引入了“同步synchronized”的概念,意思是一个线程的一个操作(包括若干指令)不做完,其他的线程就不能来操作同一个资源。
这其实也就是一个“原子”的概念。

------解决方案--------------------
事务是业务流程的一致
同步是共享数据的一致