并发请求遇到的问题

1.业务场景

      客户端的多个请求对某一个业务场景,造成在某一时刻加入相同重复的数据,让它做是否有重复的数据判断时不起作用。

2.解决办法

     把该业务场景单独抽取出来,做成一个同步(synchronized)的方法,这样就可以避免多个请求时同时做执行,而是按照执行一个请求时锁住该方法,其他的请求就不能执行。

     当上一个请求完成时,释放该锁,这样下一个请求才可以执行该方法。 

synchronized

Java语言的关键字,可用来给对象和方法或者代码块加锁,当它锁定一个方法或者一个代码块的时候,同一时刻最多只有一个线程执行这个段代码。当两个并发线程访问同一个对象object中的这个加锁同步代码块时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。然而,当一个线程访问object的一个加锁代码块时,另一个线程仍然可以访问该object中的非加锁代码块。


private synchronized void executeDisConnectedLog(String disconnectedCount,String clientBrowser,String clientTime,String cookieUserName,String XMLHttpRequest_status,String XMLHttpRequest_readyState,String textStatus,String lastSessionId){
		DisconnectedLog dislog=new DisconnectedLog();
		dislog.setClientBrowser(clientBrowser);
		String newTime=clientTime.substring(0,4)+"-"+clientTime.substring(4,6)+"-"+clientTime.substring(6,8)+" "+
				clientTime.substring(8,10)+":"+clientTime.substring(10,12)+":"+clientTime.substring(12,14);
		Date createTime= DateUtil.parseDate(newTime);
		dislog.setClientTime(createTime);
		dislog.setServerTime(new Date());
		dislog.setReadyState(XMLHttpRequest_readyState);
		dislog.setStatus(XMLHttpRequest_status);
		dislog.setTextStatus(textStatus); 
		dislog.setUserName(cookieUserName);
		dislog.setDisconnectedCount(Integer.parseInt(disconnectedCount));
		dislog.setLastSessionId(lastSessionId);
		boolean flag=true;
		flag=iesLoginService.findIsExitsDisconnectedLog(cookieUserName, XMLHttpRequest_status, XMLHttpRequest_readyState, textStatus, lastSessionId);
		if(flag){
			iesLoginService.addDisconnectedLog(dislog);
		}
	}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值