Javaの非ブロッキング非同期の結果はどのように実現されていますか?
Javaでは、非同期結果待ちでブロックしないように、マルチスレッドまたはコールバック関数が使用できます。
- マルチスレッドを使用する: 新しいスレッドを作成して時間のかかるタスクを実行し、その後後続のコードの実行を続行し、メインスレッドをブロックしません。スレッドの作成と管理には、JavaのThreadクラスまたはExecutorServiceを使用できます。
new Thread(() -> {
// 执行耗时的任务
String result = longRunningTask();
// 将结果传递给后续的代码,可以使用回调函数或者消息队列等机制
callback(result);
}).start();
// 主线程继续执行后续的代码
otherCode();
- コールバック関数を利用: 関数やインタフェースを定義し、時間がかかるタスクの結果をコールバック関数にパラメータとして渡す。コールバック関数内で結果を処理する。ラムダ式を使用するとコードを簡略化できる。
public interface TaskCallback {
void onResult(String result);
}
public void longRunningTask(TaskCallback callback) {
new Thread(() -> {
// 执行耗时的任务
String result = longRunningTask();
// 调用回调函数处理结果
callback.onResult(result);
}).start();
}
// 调用异步任务
longRunningTask(result -> {
// 处理结果
System.out.println(result);
});
// 主线程继续执行后续的代码
otherCode();
いずれの方法でも非同期結果のブロッキングを回避できますが、具体的な要件とプロジェクト構造に応じて手法を選択してください。