java 多线程 数据重复,java 多线程 出现数据重复调用有关问题

在Java多线程环境下,数据处理时出现了数据重复调用导致的主键冲突错误。问题出现在线程查询数据库、更新状态、调用接口和插入数据的过程中。为解决数据重复,建议在`findPushList`方法上加锁,考虑数据库行级锁或调整主键生成策略以确保唯一性,同时优化事务处理和日志调试。四种解决方案包括:同步方法、数据库加锁、事务处理优化和主键生成策略调整。
摘要由CSDN通过智能技术生成

java 多线程 出现数据重复调用问题

线程操作过程描述:

1、线程查询数据库表(table1)数据,并遍历修改记录状态(防止出现数据重复调用)。(此操作加入了同步锁)

2、调用接口,获取返回的状态。

3、把数据插入到数据库(table2)中,并删除table1中相应的数据。

贴代码:

数据操作类 messageMgrFacadeImpl

public synchronized List findPushList(HashMap searchMap) {

// TODO Auto-generated method stub

this.status = transactionManager.getTransaction(definition);

definition.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);

//获取全部的未发送信息

List list = this.queryForList("findPushList",

searchMap);

try {

//修改信息状态

for(int n=0;n

HashMap listMap = (HashMap)list.get(n);

searchMap.put("smsId", listMap.get("SMS_ID"));

this.update("updatePushListById",searchMap);

}

transactionManager.commit(status);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值