亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

一道面試題,求實現思路!

一道面試題,求實現思路!

慕田峪9158850 2022-10-13 11:11:48
一個交易清算處理,里面有n(10)個線程,現在需要實現以下功能,n(10)個線程中,n-4(6)個線程全部同時執行完成后,再執行剩下的4個線程。
查看完整描述

3 回答

?
慕的地10843

TA貢獻1785條經驗 獲得超8個贊

用CountDownLatch計數執行就可以。
由于是清算業務,涉及數據庫操作。傻一點的辦法就寫兩份代碼,一份代碼跑4個線程,每次執行都檢查那6個線程的數據庫操作是否完成,然后再執行。

查看完整回答
反對 回復 2022-10-16
?
藍山帝景

TA貢獻1843條經驗 獲得超7個贊

有多個方法可以解決,比較方便的辦法有三種:

1、采用CountDownLatch
CountDownLatch latch=new CountDownLatch(n-4);
聲明之后,將latch塞給n-4個線程,然后讓每個線程run方法的最后,都執行latch.countDown(),當n-4個線程都執行完時,latch的計數器也被減為0了,此時即一起完成了。然后再將latch賦值為new CountDownLatch(4),將剩余的線程啟動即可。
2、采用CyclicBarrier
邏輯與上面一樣
3、采用future
也一樣,取出n-4個線程,構建成n-4個future,扔入多線程執行器執行,然后遍歷執行future.get(xxxx)函數去同步獲取響應。當n-4個線程都執行完時,獲取響應的過程也就結束了。然后再執行下面的四個。同理。

查看完整回答
反對 回復 2022-10-16
?
婷婷同學_

TA貢獻1844條經驗 獲得超8個贊

或者先把 n-4個線程先放到一個list A中,把另外4個放到另一個listB中.先執行list A中的所有線程,當A執行完最后一個時(可以通過計數器等實現),開始執行B中的線程.

查看完整回答
反對 回復 2022-10-16
  • 3 回答
  • 0 關注
  • 111 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號