1. 程式人生 > >並發實戰:多線程處理任務,結束後,執行後續操作

並發實戰:多線程處理任務,結束後,執行後續操作

batch add 批次 for return countdown executors 操作 current

場景:

分批從大列表 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:純手敲代碼,不保證無誤運行。

並發實戰:多線程處理任務,結束後,執行後續操作