线程池的实际应用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36092584/article/details/82120671

最近要将公司项目的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();

此外,需要注意的是多线程之间会涉及到共享变量冲突问题,即当你存在共用的一些变量时就要考虑在方法内部新建对象。像这边操作数据库的话就必须每个线程开一个连接,这样线程之间才不会受到影响。

猜你喜欢

转载自blog.csdn.net/qq_36092584/article/details/82120671