多线程webservice服务端--insert多条相同数据

多线程webservice服务端--insert多条相同数据,第1张

线程webservice服务端--insert多条相同数据

一般websercvice服务端,可以同时接收多个客户端发送的信息,并且保存数据库;

基础的写法是
1)根据关键字查询数据库表是否存在数据
2)判断查询到的消息是否存在
3)
3.1不存在数据,调用insert
3.2存在数据,调用update

上面的写法一般不会出错;

	多线程的模式下,会出现一种情况是
	例子描述:线程1:根据关键字查询了数据表没对应的数据,准备insert的时候,线程2进来一条同样的信息,根据关键字查询了数据表;同一时间点,线程1是还没insert事务提交完成,数据库表也是没有数据的,线程2 查询没有对应数据,同样调用了insert; **导致同一条数据insert两次**
	为了应对这种情况,可以添加同步锁
	例子:
			**synchronized(this){//同步锁**  
						a (//返回的数据)=select(查询语句);
						if(a==null||a.equals("***")){//判断是否存在
									insert()
						}else{
									update();
						}
			**}**

那么程序执行到这一步的时候,如果有数据在执行中,那么会等待完成后,在执行;

以上 *** 作 试用单个服务器的情况;如果多个服务器模式,synchronized 无法阻止同一条信息多次insert

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/3983567.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-10-21
下一篇 2022-10-21

发表评论

登录后才能评论

评论列表(0条)

保存