暂且不谈高并发 只谈并发 .
不想丢请求再去考虑高并发 MQ或redis的事(这里不考虑)
正题.记录自我需求处理并的情况.
公司的一个框架(一种商业框架很庞大)无法使用整合市面上那些较新的技术框架,只能使用基础的java工具
这里的接口是一个模块 是webservice的
外部系统调用这个接口 重复写入 数据出现重复单据.故对此问题进行解决.
分析:
1.外部系统短时多次提交重复数据
2.接口系统业务复杂 处理数据用时过长,导致数据积压 .数据脏读.
/*** 产成品入库单* @author Administrator**/
public class GetIcFinprodin {private static final Integer JP = 127;//同步对象标识public String getExecute(String operation,String orderform){String resultstr=null; if (operation.equals("Insert")){//插入resultstr = insert(operation, orderform);}return resultstr;}/*** 插入 * @param operation* @param orderform* @return*/public String insert(String operation,String orderform){Boolean flag = true;//默认通过synchronized(JP) {//通过mes单据号查询单据是否存在 不存在就可以插入否则返回已插入提示if(StringUtils.isNotBlank(vdef1) ){try {BaseDAO bd = new BaseDAO();String vbillcodeExist = (String)bd.executeQuery("select vbillcode from ic_finprodin_h where vdef1 = '"+vdef1+"'", new ColumnProcessor());if(StringUtils.isNotBlank(vbillcodeExist)){flag = false;//已存在不允许重复插入}} catch (DAOException e) {e.printStackTrace();}}if(flag){//业务===========....耗时代码段 SGetXChangeService gtxchangeservice=new GetXChangeService();Object ovbillcode = "";JSONObject backinfojson=gtxchangeservice.getXChangeservice(xml_sb.toString());if(backinfojson.getString("$successful").equals("Y")){String pk=backinfojson.getJSONObject("sendresult").getString("content");BaseDAO bd = new BaseDAO();try {//获取插入的订单单号 ovbillcode = bd.executeQuery("select vbillcode from ic_finprodin_h where cgeneralhid ='"+pk+"'", new ColumnProcessor());backinfojson.put("$vbillcode", ovbillcode);} catch (Exception e) {e.printStackTrace();}//业务.-===========...耗时代码段 E }else if(backinfojson.getString("$successful").equals("N")) {backinfojson.put("$vbillcode",ovbillcode);}return backinfojson.toJSONString();}else{JSONObject backinfojson = new JSONObject();backinfojson.put("$successful", "Y");backinfojson.put("sendresult", vdef1+" MES单据已存在,单据已插入成功!");return backinfojson.toJSONString();} }}}
JP 标识使用 基本类型 或String 类型(注意不能new 这里是java基础的东西,可了解一下 ) 作为同一对象 保证线程同步 有兴趣的可以把 127 改成128 试试效果 估计你能找到答案
同步之后性能会下降,做个取舍吧.