防止线程并发导致事务的重复执行

Posted hanisem151

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了防止线程并发导致事务的重复执行相关的知识,希望对你有一定的参考价值。

1.可以借助第三方,如redis进行处理,在事务执行之前通过对Redis hash 添加一个记录标记当前有事务正在执行,在事务结束之后,删除对Hash记录,防止缓存数据过多。为了防止异常导致的事务没有执行成功而下一次不能执行事务的可能。需要针对事务块代码进行捕获异常进行处理,总之,finally 需要清除掉当前正在执行的标记。

2.可以通过mysql建立数据字典表,设置好主键,通过本地事务的方式,只有成功往数据字典插入记录才执行事务,否则,回滚事务。这里需要注意的是,插入重复键值时,需要通过再Insert 语句中加入IGNORE 关键字,表示自动忽略重复的记录行,不影响后面的记录行的插入,返回影响行数为0.。不通过加该关键字处理也行,捕获插入异常,插入成功,提交事务,异常,回滚事务。只不过有强迫症的表示对这个不能忍。=.=||,如下图,

技术图片

 

以上是关于防止线程并发导致事务的重复执行的主要内容,如果未能解决你的问题,请参考以下文章

并发--java线程池原理

线程及开启方式

如何解决高并发秒杀的超卖问题

多线程如何并发访问SQLite数据库

redis的incr和decr高并发会形成线程阻塞吗

Windows7内存管理——如何防止并发线程阻塞