您的位置:首页 > 其它

并发请求遇到的问题

2014-11-18 19:18 155 查看
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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  并发 线程
相关文章推荐