第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

將 Java While 循環(huán)轉(zhuǎn)換為多線程循環(huán)

將 Java While 循環(huán)轉(zhuǎn)換為多線程循環(huán)

交互式愛情 2023-09-06 15:55:41
我有一個列表說有登錄名,基于列表內(nèi)容,我正在處理其他方法,例如:while ( it.hasNext() ){   method1();}由于這些任務(wù)是獨立的,我不想等待序列,所以我想并行運行它們。我做了以下操作: ExecutorService service = Executors.newFixedThreadPool(5); final List<Future<?>> futures = new ArrayList<>(); while ( it.hasNext() )    {        Future<?> future = service.submit(() -> {                  method1(it.next());           });        futures.add(future);    }但問題是,它為一個登錄名執(zhí)行 method1 5 次...但我想要 5 個線程獨立執(zhí)行 method1。我哪里做錯了?愛?。?
查看完整描述

3 回答

?
阿晨1998

TA貢獻(xiàn)2037條經(jīng)驗 獲得超6個贊

您的方法不是線程安全的。
it.hasNext()在每次迭代時調(diào)用,因此您可以相信獲得了預(yù)期結(jié)果,但Iterator不是線程安全的。因此,如果同時執(zhí)行多個Callables,則使用迭代器會產(chǎn)生不可預(yù)測的結(jié)果。

使用 Thread 或 Callable 當(dāng)然可以利用并行性,但在使用迭代器時需要添加顯式同步。
雖然使用Callable顯式同步在某種程度上很煩人。

作為替代方案,您可以使用確保線程安全的集合,例如CopyOnWriteArrayList. 例如,將原始列表包裝在CopyOnWriteArrayList復(fù)制構(gòu)造函數(shù)中,例如:

List<Foo> copyList = new CopyOnWriteArrayList<>(list);

或者,您也可以更簡單地使用并行流,這將使您的代碼變得不那么冗長,但它在幕后的線程池的可配置性較低(在某些情況下,這很重要):

list.parallelStream().forEachOrdered(this::method1);


查看完整回答
反對 回復(fù) 2023-09-06
?
楊__羊羊

TA貢獻(xiàn)1943條經(jīng)驗 獲得超7個贊

首先嘗試獲取迭代值。


final <class> nextItem = it.next();

Future<?> future = service.submit(() -> { method1(nextItem); });

futures.add(future);


查看完整回答
反對 回復(fù) 2023-09-06
?
LEATH

TA貢獻(xiàn)1936條經(jīng)驗 獲得超7個贊

我哪里做錯了?

你有一個線程正在執(zhí)行此操作:

while ( it.hasNext() ) {
    Future<?> future = service.submit(...task...);
    futures.add(future);
}

該線程不斷調(diào)用it.hasNext(),但它從不調(diào)用it.next()

您還有其他線程(線程池的工作線程)在調(diào)用,it.next()但這些線程獨立于循環(huán)運行。如果循環(huán)向執(zhí)行器服務(wù)提交任務(wù)并將 future 添加到列表所需的時間小于工作線程選擇并執(zhí)行任務(wù)所需的時間,則循環(huán)將領(lǐng)先于執(zhí)行器服務(wù),它會提交比您預(yù)期更多的任務(wù)。


查看完整回答
反對 回復(fù) 2023-09-06
  • 3 回答
  • 0 關(guān)注
  • 146 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號