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

场景:

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

 

转载于:https://www.cnblogs.com/codegod/p/7953802.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值