3 回答

TA貢獻1785條經(jīng)驗 獲得超8個贊
用CountDownLatch計數(shù)執(zhí)行就可以。
由于是清算業(yè)務(wù),涉及數(shù)據(jù)庫操作。傻一點的辦法就寫兩份代碼,一份代碼跑4個線程,每次執(zhí)行都檢查那6個線程的數(shù)據(jù)庫操作是否完成,然后再執(zhí)行。

TA貢獻1843條經(jīng)驗 獲得超7個贊
有多個方法可以解決,比較方便的辦法有三種:
1、采用CountDownLatch
CountDownLatch latch=new CountDownLatch(n-4);
聲明之后,將latch塞給n-4個線程,然后讓每個線程run方法的最后,都執(zhí)行l(wèi)atch.countDown(),當n-4個線程都執(zhí)行完時,latch的計數(shù)器也被減為0了,此時即一起完成了。然后再將latch賦值為new CountDownLatch(4),將剩余的線程啟動即可。
2、采用CyclicBarrier
邏輯與上面一樣
3、采用future
也一樣,取出n-4個線程,構(gòu)建成n-4個future,扔入多線程執(zhí)行器執(zhí)行,然后遍歷執(zhí)行future.get(xxxx)函數(shù)去同步獲取響應(yīng)。當n-4個線程都執(zhí)行完時,獲取響應(yīng)的過程也就結(jié)束了。然后再執(zhí)行下面的四個。同理。

TA貢獻1844條經(jīng)驗 獲得超8個贊
或者先把 n-4個線程先放到一個list A中,把另外4個放到另一個listB中.先執(zhí)行l(wèi)ist A中的所有線程,當A執(zhí)行完最后一個時(可以通過計數(shù)器等實現(xiàn)),開始執(zhí)行B中的線程.
添加回答
舉報