死锁(Mysql)-------来自编程小白的工作经验
由于项目上线的测试,需要写一个项目真实数据的造数接口,所以个人想法就是将之前的项目所有流程通过httpClient的方式重新依次的调用,然后使用线程进行循环造数,当然如果会python的朋友,写起来会更容易一些!
言归正传:什么是死锁呢?
较官方解释:
死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程
看过官方的解释后,相信对于并发不是很了解的,感觉这些东西离自己很远啊,很迷,其实不然,个人理解,死锁其实就是同一个资源我在使用时,还没有使用完毕,另一个人也想去调用或者去使用,那么此时必然出现了死锁问题.情景再现:
上述代码中@Transactional注解对这个方法中的代码进行了同一事务的管理,然后代码中进行了调用了commit方法,实际则是对数据库进行了一个insert操作,但是后面的逻辑中还同时对表进行了update操作,那么此时mysql中同一张表的同一个事务中insert操作还没有完成,同时又对此表进行了update操作,产生了死锁.
解决方法:
1.百度的:
(1)终止(或撤销)进程。终止(或撤销)系统中的一个或多个死锁进程,直至打破循环环路,使系统从死锁状态中解除出来。
(2)抢占资源。从一个或多个进程中抢占足够数量的资源,分配给死锁进程,以打破死锁状态。
2.由于上诉的死锁只能解决一次的死锁,并不能解决个人开发遇到的时间问题.所以个人是将这两个操作放到了两个不同的事务中进行处理,完美解决问题.