Java多线程:解决高并发环境下数据插入重复问题(干货)

2023-11-15

每日一更,最近的问题真是一个接一个,真的让人头大,昨天遇到一个多线程的问题问题描述一下:

有一个线程的问题,就是假如 我有一个文件,然后这个文件有很多条数据,假如有两个字段,一个学号一个钱,(我的需求是,读取文件,把数据插入到表里,先拿文件的学号去查表有这个数据,就把钱进行相加,没有就新增一条数据)现在遇到问题是:我开多线程跑,现在出现了,这个表里有两条数据的概念(不应该是两条,因为读文件有就把钱相加,没有就新增),我感觉是,多个线程拿到了两条一样的学号同时去库里查,都没有查到,把这两条同时新增到了表里

没看懂?简说下

if(用户不存在)
{
    xxxxx
    存储用户到数据库
}
else
{
   更新数据,将钱数进行相加
     }

意思是在一条线成操作还没有执行完毕,第二条拥有相同数据的线程已经进入并通过了if的检验,导致数据库存储了两条相同的数据。所以就会导致数据不对,钱并没有加上且数据库出现了多条数据

然后我就百度了一下感觉有一个大佬做出了这个比喻,我觉得很恰当祥和里分享下:
插入Java多线程不安全的场景比喻: 苹果饮食竞赛,比如三个人同时吃10个苹果,就会有一个数字,问题:当同时执行多个线程的时候,可能会出现线程不安全的问题,当三个人同时获得一个苹果时,他们同时执行了这个操作,就会产生多条数据操作。

**

解决方案:

**
然后我就查了许多资料,然后也听朋友说了许多

  1. 解决的办法,当然加锁是我万不得已的选择才会去选择,因为以我现在的水平,我觉得我对线程的了解仅仅是九牛一毛,根本操控不了
  2. 还有一个办法就是说首先把所有的文件数据全部导入一张临时表,然后对临时表进行分组 统一进行金钱相加,(说实话这个方法可行,但是时间问题,200多万的数据确实会很慢,所以我也只是考虑并没有使用)
  3. 最后我想到一个方法就是对查询的学号做约束(也就是做唯一索引,让程序进行插入的时候进行报错,也就是说在sql中如果学号重复,再次进入插入的时候就会报索引唯一 key 什么玩意),然后我在写的代码中进行捕获,一开始怎么捕获还是会抛出错误,后来发现,那个sql主键重复并不是异常,而是error,然后我就记得error也能进行捕获,后来我又找到error的捕获:
error和exception都是可以捕获的,他们两个都是Throwable的子类(这里是重点)

最后我将代码改为:

if(用户不存在)
{
  try{
    xxxxx
    存储用户到数据库
}catch(Throwable e){
  更新数据,将钱数进行相加
	}
}
else
{
   更新数据,将钱数进行相加
     }

问题解决
菜鸡一枚,希望有更好方案的大佬给我留言,希望能帮助大家,一点点进步

加油打工人!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java多线程:解决高并发环境下数据插入重复问题(干货) 的相关文章

随机推荐

  • (2022)安卓和苹果应用注册上架概述

    目录 一 点击目录跳转对应文章 一 华为开发者申请及上架 二 小米开发者申请及上架 三 应用宝开发者申请及上架 四 OPPO开发者申请及上架 五 VIVO开发者申请及上架 六 苹果开发者申请及上架 开始前的准备工作 1 注册前先准备一个邮箱
  • 数据结构刷题:第十七天(基础)

    目录 一 杨辉三角 二 旋转图像 看题解 三 螺旋矩阵 一 杨辉三角 119 杨辉三角 II 力扣 LeetCode https leetcode cn problems pascals triangle ii plan data stru
  • python爬虫:抓取页面上的超链接

    Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库 它能够通过你喜欢的转换器实现惯用的文档导航 查找 修改文档的方式 Beautiful Soup会帮你节省数小时甚至数天的工作时间 页面上的超链接 在H
  • Tangram 2.0 VirtualView Demo 配置

    天猫开源了一个动态UI的方案 包含 https github com alibaba VirtualView iOS https github com alibaba tangram ios 简单来个Demo 1 常规创建工程 配置podf
  • nohup 后台启动程序,并输出到指定日志

    1 启动程序并输入到指定日志 nohup python manage py runserver 0 0 0 0 9090 gt data zyj xadstat xadstat log 2 gt 1 或者 nohup python mana
  • 企培版edusoho对接第三方云视频点播 最新版本代码披露 支持m3u8视频加密

    edusoho企培系列版本更新日志 新增功能和优化历史 倍数播放功能 视频分类 支持m3u8视频加密 plugins AliVideoPlugin DependencyInjection Configuration php
  • 零基础入门网络安全,收藏这篇不迷茫【2023 最新】

    零基础入门网络安全 收藏这篇不迷茫 2023 最新 前言 最近收到不少关注朋友的私信和留言 大多数都是零基础小友入门网络安全 需要相关资源学习 其实看过的铁粉都知道 之前的文里是有过推荐过的 新来的小友可能不太清楚 这里就系统地叙述一遍 0
  • Qt connect的实现原理

    概述 connect实质上是将对象A的信号和对象B的槽函数进行连接 然后返回一个句柄Connection 正文 下面通过源码来解析一下 注意看中文注释 connection表示信号槽连接句柄 QMetaObject Connection Q
  • 15. 从0开始学ARM-位置无关码

    目录 十九 位置无关码 一 为什么需要位置无关码 1 exynos 4412启动流程 二 怎么实现位置无关码 1 什么是 编译地址 什么是 运行地址 2 举例 3 代码 四 总结 1 位置无关码 2 位置相关码 3 位置无关码的应用 4 结
  • 动态实体类方案1.0(虚拟实体类生成器)[万能实体]

    该工具能实现任何实体类的动态生成传入参数名称自动生成get set方法 供反射调用 该方法生成的实体类是在程序运行过程动态生成加载出来的 实际代码文件并不存在 所以我暂定他为虚拟实体类生成工具 本方法我自己暂时用在mybatis中当统一的传
  • DETR源码学习(三)之损失函数与后处理

    在DETR模型中 在完成DETR模型的构建后 我们送入数据在完成前向传播后就需要使用预测值与真实值进行计算损失来进行反向传播进而更新梯度 在DETR模型中 其标签匹配采用的是匈牙利匹配算法 主要涉及models matcher py mod
  • 调用百度API实现人脸识别

    人脸识别 听着很高级 但实际上它确实很高级 不过对于我们开发人员来说 我们大部分人都是拿来主义 这次展示的是调用百度人脸识别API进行人脸信息分析 笔者试了下 发现还是挺准确的 而且代码量很少才8行 用的python 如果用java铁定不止
  • js拼接字符串与变量

    使用eval 方法可将拼接后的字符串与变量转变为变量 var field test 我是小白鼠一号 var field test 我是小白鼠二号 然后在JS里尝试将前面的语言简写当成变量 拼接后面的字符串 var lang field va
  • 含泪整理最优质Fbx 3d模型素材,你想要的这里都有

    今天小编针对Fbx 3d模型素材为大家整理了很多内容哦 肯定有需要的小伙伴吧 实用 免费 优质的素材谁又不心动呢 赶紧码住 接下来就给大家介绍一下我珍藏已久的网站 我的工作灵感都是来源它哦 里面的Fbx 3d模型资源数量多 种类丰富 并且每
  • Ubuntu16.04搭建Fabric1.4环境

    一 换源 为了提高下载速度 将ubuntu的源改成国内的源 推荐阿里云源和清华源 apt源保存在 etc apt sources list 代表根目录 etc 这个文件夹几乎放置了系统的所有配置文件 1 备份 sudo cp etc apt
  • shell基础+强化

    shell脚本 一 shell介绍 什么是shell shell功能 1 什么是shell shell是一个程序 采用C语言编写 是用户和Linux内核沟通的桥梁 它既是一种命令语言 又是一种解释性的编程语言 通过一个图标来查看以下设立了的
  • Codeforces 1469 F. Power Sockets —— 二分+线段树,贪心

    This way 题意 现在有一个根节点 和n条包含a i 个节点的链 一开始所有点的颜色是白色的 你每次可以做以下操作 找到树中某个白色节点 拿出一条链 将这个节点和链上某个节点连接 并且这两个点的颜色变成黑色 之后这条链属于树中一个部分
  • 正则表达式中的“^“这个符号的一些思考

    在学习正则表达式的时候 一些常见的规则我们都不难理解 但是有 一个正则表达式中的特殊字符让我一直有点搞不懂 就是 这个字符 文档上给出了解释是匹配输入的开始 如果多行标示被设置成了true 同时会匹配后面紧跟的字符 比如 A 会匹配 An
  • A Survey of Knowledge-Enhanced Pre-trained Language Models

    本文是LLM系列的文章 针对 A Survey of Knowledge Enhanced Pre trained Language Models 的翻译 知识增强的预训练语言模型综述 摘要 1 引言 2 背景 3 KE PLMs用于NLU
  • Java多线程:解决高并发环境下数据插入重复问题(干货)

    每日一更 最近的问题真是一个接一个 真的让人头大 昨天遇到一个多线程的问题问题描述一下 有一个线程的问题 就是假如 我有一个文件 然后这个文件有很多条数据 假如有两个字段 一个学号一个钱 我的需求是 读取文件 把数据插入到表里 先拿文件的学