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 ...