我经常有一种印象,即可以在事务和线程之间进行紧密的类比。事实上:
- 事务是一系列操作。正在运行的线程是一系列语句。
- 事务读取/修改行和表(就关系数据库而言(。线程读取/修改类和静态字段。
- 事务利用锁来实现数据一致性。线程也是如此。
如果这个类比真的发生了,那么每个人都会更容易使用他们对多线程的知识来理解事务(反之亦然(。
但是,有一个问题:在多线程世界中,事务提交(或回滚(似乎没有紧密的类比。
这是否意味着现实中的类比只是一种幻觉,在学习事务时最好不要使用有关多线程的知识?还是还有提交/回滚的类比?
在Java中,可以让一个线程等待另一个线程死亡(参见Thread.join(。事务的提交/回滚操作似乎类似于线程的死亡。