并发实战:多线程处理任务,结束后,执行后续操作

Posted 川雨淅

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了并发实战:多线程处理任务,结束后,执行后续操作相关的知识,希望对你有一定的参考价值。

场景:

分批从大列表 blist 读取数据,执行验证过滤,符合条件的加入到列表中。然后执行批量入库操作。

思路:

多任务从 blist 取数据执行,采用Excuetors框架;

多线程插表,列表需要线程安全,采用ConcurrentLinkedQueue;

blist 取数完毕,执行批量入库操作,采用CountDownLatch卡住。

确认当前批次验证成功记录已插入到列表中。

伪代码:

CountDownLatch cLatch = new CountDownLatch(1);

多线程验证 blist 加入queue:

ExecutorService exec = Excuetors.newCachePool(3);

ConcurrentLinkedQueue<Object> queue = new ConcurrentLinkedQueue<Object>();

Runnable task = new Runnable() {    

   public void run(

    for(String str : blist){

    validate(str) == true

    queue.add(str);

    }

  ) {    

 } };

if(!exec.isShutDown)(

  exec.execte(task);

}

while(true){

  if(exec.isTerminated){

    break;

  }

  Thread.sleep(20);

}

exec.shutDown();

cLatch.countDown();

return queue;

批量插入:

cLatch.await();

batchInsert.insert(quue);

 

PS:纯手敲代码,不保证无误运行。

 

以上是关于并发实战:多线程处理任务,结束后,执行后续操作的主要内容,如果未能解决你的问题,请参考以下文章

线程进程携程理解

Java 多线程

Java 多线程

java 一个线程处理多个任务

多线程入门

多线程