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

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

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

原文地址:https://www.cnblogs.com/hanisem151/p/11395898.html

时间: 2024-10-13 23:20:38

防止线程并发导致事务的重复执行的相关文章

线程高级应用-心得4-java5线程并发库介绍,及新技术案例分析

1.  java5线程并发库新知识介绍 2.线程并发库案例分析 1 package com.itcast.family; 2 3 import java.util.concurrent.ExecutorService; 4 import java.util.concurrent.Executors; 5 import java.util.concurrent.TimeUnit; 6 7 public class ThreadPoolTest { 8 9 /** 10 * @param args

02 如何创建线程 线程并发与synchornized

所有程序运行结果 请自行得出 创建线程方式一:继承Thread类 步骤: 1,定义一个类继承Thread类. 2,覆盖Thread类中的run方法. 3,直接创建Thread的子类对象创建线程. 4,调用start方法开启线程并调用线程的任务run方法执行. 1 /* 2 * 需求:我们要实现多线程的程序. 3 * 如何实现呢? 4 * 由于线程是依赖进程而存在的,所以我们应该先创建一个进程出来. 5 * 而进程是由系统创建的,所以我们应该去调用系统功能创建一个进程. 6 * Java是不能直接

remove name="ProxyModule“会导致重复执行

<?xml version="1.0" encoding="utf-8"?> <!-- 有关如何配置 ASP.NET 应用程序的详细信息,请访问 http://go.microsoft.com/fwlink/?LinkId=169433 --> <configuration> <appSettings> <add key="DomainProxy1" value="http://e3

两个线程并发执行以下代码,假设a是全局变量,那么以下输出______是不可能的?

3.两个线程并发执行以下代码,假设a是全局变量,那么以下输出______是不可能的? void foo(){    ++a;    printf("%d ",a);}A.3 2    B.2 3    C.3 3    D.2 2  1.读a            5.读a2.a+1            6.a+13.写a            7.写a4.打印a          8.打印a B:12345678C:12356784(或48)D:15234678

事务并发、事务隔离级别

不可重复读(Nonrepeatable Read) 一个事务的两次读取中,读取相同的资源得到不同的值.当事务T2在事务T1的两次读取之间更新数据,则会发生此种错误(重点在修改) 幻读(Phantom): 此概念相对难理解一些. 事务T1对一定范围内执行操作,T2对相同的范围内执行不兼容的操作,这时会发生幻读. 如:T1删除符合条件C1的所有数据,T2又插入了一些符合条件C1的数据,则在T1中再次查找符合条件C1的数据还是可以查到,这对T1来说好像是幻觉一样,这时的读取操作称为幻读.(重点在新增或

【java并发】线程并发库的使用

1. 线程池的概念 在java5之后,就有了线程池的功能了,在介绍线程池之前,先来简单看一下线程池的概念.假设我开了家咨询公司,那么每天会有很多人过来咨询问题,如果我一个个接待的话,必然有很多人要排队,这样效率就很差,我想解决这个问题,现在我雇几个客服,来了一个咨询的,我就分配一个客服去接待他,再来一个,我再分配个客服去接待--如果第一个客服接待完了,我就让她接待下一个咨询者,这样我雇的这些客服可以循环利用.这些客服就好比不同的线程,那么装这些线程的容器就称为线程池. 2. Executors的

Java 线程并发策略

1 什么是并发问题. 多个进程或线程同时(或着说在同一段时间内)访问同一资源会产生并发问题. 2 java中synchronized的用法 用法1 public class Test{ public synchronized void print(){ ....; } } 某线程执行print()方法,则该对象将加锁.其它线程将无法执行该对象的所有synchronized块. 用法2 public class Test{ public void print(){ synchronized(thi

关于java线程并发的一些破事

Java并发结构 原文链接:http://gee.cs.oswego.edu/dl/cpj/mechanics.html   内容 线程 同步 监视器 线程 线程是一个独立执行的调用序列,同一个进程的线程在同一时刻共享一些系统资源(比如文件句柄等)也能访问同一个进程所创建的对象资源(内存资源).java.lang.Thread对象负责统计和控制这种行为. 每个程序都至少拥有一个线程-即作为Java虚拟机(JVM)启动参数运行在主类main方法的线程.在Java虚拟机初始化过程中也可能启动其他的后

【Linux】线程并发拷贝程序

据说大连某211高校的李教授越来越重口.不仅延续要求他所带的每个本科班.都要写一份线程并发拷贝程序的传统,并且还開始规定不能用Java语言写作.导致我之前写的<[Java]线程并发拷贝程序>(点击打开链接)作废.全部李教授旗下的学生,必须在毫无图形界面的Linux系统.用里面vi去写作. 这更让莘莘学子们感觉本来头来就不光明的天空更加黑暗起来. 更重要的是.若干年过去了,网上对其的研究与资料,依然是少数.依然是那份流传已久,以讹传讹的C语言版. 尽管这个程序毫无研究价值,可是本着治病救人.同一