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

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

發布時間: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參數對

閱讀全文

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

熱點內容
傘齒模數的測量方法 瀏覽:880
懸浮蘋果怎麼設置方法 瀏覽:371
摻合料安定性檢測實驗方法 瀏覽:159
做橡皮泥的圖片和方法 瀏覽:490
剝大蒜什麼方法剝得快 瀏覽:843
冰上速滑的停止方法包括哪些選項 瀏覽:368
手臂下蹲鍛煉方法 瀏覽:515
如何選擇燃燒性能試驗方法 瀏覽:363
溶出方法開發前需要進行研究什麼 瀏覽:797
時間段成本控制方法有哪些 瀏覽:562
孫儷減肥方法圖片 瀏覽:691
交流電的電流表接線安裝方法 瀏覽:753
智雲單反手機穩定器調平方法 瀏覽:732
如何去痘痘疤最有效的方法 瀏覽:503
一噴清使用方法 瀏覽:491
會計監督研究方法 瀏覽:891
省錢的方法和技巧英語 瀏覽:852
腳底磨快破了怎麼處理方法 瀏覽:850
兒童何首烏的食用方法治白發 瀏覽:770
臨時起搏器導線連接方法 瀏覽:899