同步轉非同步

2022-10-09 06:48:12 字數 1266 閱讀 6231

countdownlatch

乙個同步輔助類,在完成一組正在其他執行緒中執行的操作之前,它允許乙個或多個執行緒一直等待。

/*

初始化物件

數字1自己定,一般有幾個需要同步的非同步執行緒就設定為幾

*/countdownlatch countdownlatch = new countdownlatch(1);

//讓非同步執行緒執行完畢後進入等待

countdownlatch.await();

/* 例項化時的計數-1,計數為0時則喚醒所有阻塞的執行緒

就是說當你規定數量的非同步執行緒都執行這一步後,主線程直接被喚醒

*/countdownlatch.countdown();

例:有個公用變數,需要非同步去執行改變其值,但是改變的值主線程還未獲取到,就繼續執行了,所以需要讓主線程等待非同步呼叫執行完畢後才繼續往下走

**如下:

public class demo}}

public class runnabledemo implements runnable catch (interruptedexception e) 

nonsyncdemo1.str = "我已改變";}}

可以看到str還沒被改變程式就走完了

所以我們要利用countdownlatch讓這個非同步操作轉成同步

**如下:

public class demo catch (interruptedexception e) 

for(int i=1; i<=10; i++)}}

public class runnabledemo implements runnable catch (interruptedexception e) 

nonsyncdemo1.str = "我已改變";

demo.countdownlatch.countdown();}}

可以看到這次str是改變後再輸出值了

大概的用法基本就是這樣,本人小白一枚,如有說錯,望各位踴躍指出,我好即時更正

Dubbo非同步轉同步

dubbo是一款開源rpc框架,底層使用netty作為預設的資料傳輸方式,那麼請求處理理論上是非同步的,但是我們在使用dubbo時,是同步拿到結果的,這是因為dubbo框架幫我們做了非同步轉同步的操作。構造乙個defaultfuture,並將defaultfuture放在map中,key為請求是生成...

2019 9 2 C 同步方法轉非同步

title author date createtime categories c 同步方法轉非同步 lindexi 2019 09 02 12 57 37 0800 2018 2 13 17 23 3 0800 c 最簡單的方法是建立乙個新的執行緒,建立的方法是使用 task.run 請看下面 原...

win10 uwp 非同步轉同步

有很多方法都是非同步,那麼如何從非同步轉到同步?可以使用的方法需要獲得是否有返回值,返回值是否需要。如果需要返回值,使用getresults 如從資料夾獲取檔案 storagefolder folder storagefolder.getfolderfrompathasync getresults ...