编程语言
首页 > 编程语言> > Java使用线程池存入实时数据(锁)

Java使用线程池存入实时数据(锁)

作者:互联网

概述

由于项目中应用到实时数据的接收,但是后端并不能直接将接收到的数据进行入库,需要进行一定的格式化及处理后才能入库。当单线程情况下接收到一定时间后,后端处理的数据为之前时间接收到的数据,则通过线程池来实现多个线程添加数据。

线程同步(synchronized)

线程同步问题在此项目中提现于,当前数据被其他线程获取并未添加进数据库时,此时又被其他线程获取到,则会出现同一条数据被添加进两次数据库的现象。

数据片段

在这里插入图片描述

可以看到第一条数据和第二条数据完全相同,但是被添加了两次;这就可能导致如果当前数据为故障数据,那么系统就会为同一条数据发出两次故障预警信息。

解决方案

在java存入数据模块代码中,添加同步代码块synchronized();通过使用同步代码块对存库操作的语句进行加锁,从而实现实时数据在数据库中的唯一性。

数据片段

数据
可以看到添加同步代码块后的实时数据没有了重复数据。

线程同步(Lock)

Lock锁方法也可同样实现线程的同步问题,实现方法为:在实现存库代码模块中对存入对象进行加锁,这样便可以实现数据在库中的唯一性。注:Lock锁需要手动加锁并解锁,故为防止死锁,则unlock()方法需放在finally代码块中。

数据片段

数据
可以看到数据库中数据并没有相同数据存在。

由于项目中代码为保密内容,故在此只做文字记录叙述,此博客也为自己解决多线程问题留下解决思路,如有错误欢迎大家指出。

标签:同步,Java,代码,存入,添加,线程,加锁,数据
来源: https://blog.csdn.net/Inevitable_wl/article/details/119035396