数据量大,处理慢,达不到性能要求。。。
这个时候,我们很容易就会想到用多线程去提升处理速度。
但要求还不仅是快这么简单,还需要保证一个线程出错,所有的数据都会滚。。。
这时候很多同学就会琢磨出一个奇怪的概念,多线程事务?
多线程事务既可以多线程提高效率,又可以所有线程保证事务回滚,是真的吗???
在这里插入图片描述
别问,问就是假的,多线程事务是一个伪命题

说到事务,那我们首先的撸一下ACID,事务的四个特性
A:原子性,一个事务要么全部提交成功,要么全部失败回滚,不能只执行其中的一部分操作
C:一致性,事务的执行不能破坏数据库数据的完整性和一致性,一个事务在执行之前和执行之后,数据库都必须处于一致性状态。如果数据库系统在运行过程中发生故障,有些事务尚未完成就被迫中断,这些未完成的事务对数据库所作的修改有一部分已写入物理数据库,这是数据库就处于一种不正确的状态,也就是不一致的状态
I:隔离性,事务的隔离性是指在并发环境中,并发的事务时相互隔离的,一个事务的执行不能不被其他事务干扰。不同的事务并发操作相同的数据时,每个事务都有各自完成的数据空间,即一个事务内部的操作及使用的数据对其他并发事务时隔离的,并发执行的各个事务之间不能相互干扰。
D:持久性,一旦事务提交,那么它对数据库中的对应数据的状态的变更就会永久保存到数据库中。即使发生系统崩溃或机器宕机等故障,只要数据库能够重新启动,那么一定能够将其恢复到事务成功结束的状态

有了事务的四个特性之后,我们再回过头来看多线程事务这个概念。
隔离性,你品,你细品。
这是不是就出问题了。
比如A、B、C三个线程做操作,B出问题了,希望A和C一起回滚
这不就是想要的多线程事务?
但是,A、B、C三个线程之间本来是各跑各的,但由于B出错,要带着A和C一起回滚,这不就造成可各个事务之间的相互干扰,破坏了隔离性
在这里插入图片描述
通过上面的论述,多线程事务在理论上是不成立的。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐