我想知道是否有辦法function在 java 中執行的另一個函式的 15 秒后執行asynchronously。例如,我有 2 個功能。
1. public void func1() {
}
2. public void func2() {
}
Afterfunc1被執行,15秒后我想func2被執行。理由 -對外部Func1做一個。外部需要大約 15 秒的時間來處理和存盤資料。15 秒后,我想從中獲取某些已處理的并將其存盤在. 我不希望用戶等待完整的請求完成。請指教updateinterfaceinterfacedata(URL)interfacedatabase
uj5u.com熱心網友回復:
在您異步呼叫的方法中進行兩次呼叫,然后在該方法中呼叫第一個,然后在呼叫第二個之前執行 Thread.sleep(15000) 。
uj5u.com熱心網友回復:
從您呼叫的地方func1(),生成一個將休眠 15 秒然后呼叫的執行緒func2()。下面是main()方法呼叫func1()然后異步呼叫的演示func2。該執行緒負責等待 15 秒,而不是main方法。main方法立即解除阻塞。
import java.util.Date;
public class AsyncCall {
public static void main(String[] args) {
AsyncCall solution = new AsyncCall();
solution.func1();
//async call
new Thread(() -> {
try {
Thread.sleep(15 * 1000);
solution.func2("async call");
} catch (InterruptedException e) {
e.printStackTrace();
}
}).start();
//sync call : no need to call this but just for demo
solution.func2("sync call");
}
public void func1() {
System.out.println(new Date() " : func1 called");
}
public void func2(String arg) {
System.out.println(new Date() " : func2 called with arg: " arg);
}
}
結果:
Wed Mar 30 13:15:52 EDT 2022 : func1 called
Wed Mar 30 13:15:52 EDT 2022 : func2 called with arg: sync call
Wed Mar 30 13:16:07 EDT 2022 : func2 called with arg: async call
uj5u.com熱心網友回復:
最簡單的解決方案是Thread.sleep在后續呼叫之間包含。但是如果請求數量太大,會導致很多執行緒處于WAIT狀態,最終阻塞系統(執行緒池)。
稍微好一點的解決方案是把中間狀態保存在DB中,讓cron作業批量接這些任務,呼叫func2。這對您來說不是最佳解決方案,因為您正在尋找要在 15 秒內呼叫的內容。如果您可以等待 10-15 分鐘,您可以使用它。
一個更優越的方法是有一個回呼,可以幫助您了解資料是否已被處理,如下所述。
假設 Func1 從服務 X 呼叫服務 A。現在服務 A 正在處理(假設處理需要 10 秒),現在服務 A 將觸發對服務 X 的回呼,告知處理已完成,服務 X可以呼叫服務 B。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/453704.html
