码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2017-12-02 12:53:25      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:date   count   场景   .exe   break   read   link   bsp   cache   

场景:

分批从大列表 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:纯手敲代码,不保证无误运行。

 

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

标签:date   count   场景   .exe   break   read   link   bsp   cache   

原文地址:http://www.cnblogs.com/codegod/p/7953802.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!