【排坑】多线程导致数据混乱(一)

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

【前提】:使用多线程并发,每个线程获取表里不同Time字段的数据,然后执行业务逻辑代码。目标是让每个线程都能独立运行,互不干扰并发完成。

【代码】:

//线程池管理
ExecutorService es = Executors.newCachedThreadPool();
for(int i=1;i list = TestGenerContractUtil.getMainByLstUpdTime(sdf.format(start), sdf.format(end));

			//后续业务逻辑处理
			for(TmAppMain appMain:list){
				queueSender.synchAppStatus(appMain.getAppNo(), null, true);
			}
		}
	});
	es.execute(iThread);
}

【结果】:多线程获取数据list中出现重复混乱的情况

【原因】:多线程没有安全并发访问。TestGenerContractUtil 工具类是开发多线程前封装的,代码上可以看出TestGenerContractUtil 类里的方法 getMainByLstUpdTime 是静态方法。 类的所有实例共享同一个static 方法或变量,这就是多线程中引用 static修饰 导致的非安全的坑。

转载于:https://my.oschina.net/xiaohai945/blog/1791117

你可能感兴趣的:(【排坑】多线程导致数据混乱(一))