導航:首頁 > 方法技巧 > 循環調用非同步方法如何獲取返回值

循環調用非同步方法如何獲取返回值

發布時間:2023-01-06 07:34:22

1. 怎麼循環獲取非同步請求中回調函數的返回值

這問題不是這i么解的吧,非同步的回調函數,你獲取回調函數的返回值,時間不確定的。要加個標志位來判斷回調函數是否執行完畢。

2. 如何在java中獲取線程非同步執行之後的結果

java中提供了Future<V>介面和實現了Future介面的FutureTask<V> 類來將線程執行之後的結果返回(通過get()方法)。
1.Future<V>介面
Runnable介面執行任務是不返回任何值的,Runnable的run()方法的執行結果是void,而Future介面的call方法是有返回結果的,這是Runnable跟Future的區別之一,它們的另一個不同之處就是實現了Runnable介面的任務執行是調用ExecutorService的execute(Runnable task)方法,而實現了Future介面的任務是調用ExecutorService的submit(Future task)方法。調用Future的get()方法就能直接得到任務的返回值,該方法會一直阻塞直到任務的結果出來為止,我們可以調用Future的isDone()方法來判斷該任務的結果是否准備就緒。
[java] view plain
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class TestFuture {
public static void main(String[] args) throws InterruptedException, ExecutionException {
ExecutorService executor = Executors.newCachedThreadPool();
Future result1 = executor.submit(new Callable() {
@Override
public Integer call() throws Exception {
int sum = 0;
for (int i = 0; i < 10; i++) {
sum += i;
}
return sum;
}
});
Future result2 = executor.submit(new Callable() {
@Override
public Integer call() throws Exception {
int sum = 0;
for (int i = 10; i < 100; i++) {
sum += i;
}
return sum;
}
});
executor.shutdown();
System.out.println(result1.get() + result2.get());
}
}
2.FutureTask類
FutureTask實現了Future介面,將一個Callable實例作為參數傳給它,就能創建一個FutureTask實例,然後用ExecutorService的submit方法來執行這個實例。最後同樣是用get方法獲取線程執行後的結果。
[plain] view plain
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.FutureTask;
public class TestFutureTask {
public static void main(String[] args) throws InterruptedException, ExecutionException {
ExecutorService executor = Executors.newCachedThreadPool();
Callable task = new Callable() {
@Override
public String call() throws Exception {
return "結果";
}
};
FutureTask ft = new FutureTask(task);
executor.submit(ft);
System.out.println(ft.get());
executor.shutdown();
}
}empty

3. 怎麼在主調方法內獲取非同步請求的回調函數的返回值

簡單,並且處理很快,就在回調函數中直接處理即可,如果需要花費較長的時間,你就需要建立數據緩沖區,先將數據填入緩沖區,然後直接返回,同時建立單獨的線程來處理緩沖區的數據,這當中需要注意緩沖區的同步操作保護例如,你的界面程序調用通信模塊,在界面程序中設置了回調用來響應通信模塊中接收到的數據,在處理時將收到的數據顯示在界面上,對於數據量較少的情形,你直接在回調中將收到的數據拋出消息給主界面刷新即可;對於數據量很大的場合,你直接拋消息很可能會失敗,而且每次收到數據都觸發界面刷新會嚴重降低性能,那麼就需要先將數據填入緩沖區,主界面以定時讀取數據的方式來刷新另外,虛機團上產品團購,超級便宜

4. 如何獲取AsyncTask 非同步處理的返回值

你新建的類extends AsyncTask後要提供三個泛型參數,並且重載你需要的方法, 三個參數Params,Progress和Result,最後一個就是後台操作後可以返回的值,看例子 public class ProgressBarAsyncTask extends AsyncTask{ /** * 這里的String參數對

閱讀全文

與循環調用非同步方法如何獲取返回值相關的資料

熱點內容
小s清脂套使用方法視頻 瀏覽:309
被套安裝方法圖解 瀏覽:635
解憂大隊鍛煉方法 瀏覽:957
水準計算方法定義 瀏覽:203
如何排肺毒最有效的方法 瀏覽:480
跨欄跑過欄技術實踐教學方法 瀏覽:473
怎麼殺老甲魚最有效方法 瀏覽:672
怎樣快速通便拉得又多土方法 瀏覽:84
藍凈靈的使用方法 瀏覽:335
廣東pvc木飾面安裝方法 瀏覽:183
公司管理方法叫什麼 瀏覽:14
鑒別紅薯最好的方法 瀏覽:877
4g手機電話轉移在哪裡設置方法 瀏覽:428
禁食水的正確使用方法 瀏覽:436
水泥膨脹劑的使用方法 瀏覽:465
怎麼教股票開盤方法 瀏覽:674
582減198簡便方法 瀏覽:432
問題要有解決方法的名言 瀏覽:545
剩米飯和豆皮怎麼做好吃簡單方法 瀏覽:179
口才訓練16種方法 瀏覽:653