最近要将公司项目的JS代码改造成Java代码,需要用到多线程。需求大概是这样的:有一大批客户,需要对这一大批客户进行风险测评,测评涉及到对表的update操作,这边采用多线程分批对数据库进行操作。
下面是主要代码结构
//创建线程池,设置为static
if (exec == null)
exec = Executors.newFixedThreadPool(coreSize);
//同步计数器,协调多个线程之间的同步
final CountDownLatch endGate = new CountDownLatch(4);
// 创建4个线程
for(int i = 0; i < 4; i++){
//提交任务
exec.submit(new Runnable() {
@Override
public void run() {
doSth(param);
System.out.println("执行线程" + Thread.currentThread().getName());
endGate.countDown();
}
});
}
try {
endGate.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
// 线程结束后,需要处理的事情
doFinalThing();
此外,需要注意的是多线程之间会涉及到共享变量冲突问题,即当你存在共用的一些变量时就要考虑在方法内部新建对象。像这边操作数据库的话就必须每个线程开一个连接,这样线程之间才不会受到影响。