Javaにおける非同期呼び出しの実装方法
Javaでは、マルチスレッド、コールバックインターフェイス、Future、CompletableFutureなどで非同期処理ができます。
- マルチスレッド:新しいスレッドを作成し、そこで時間のかかる処理を実行してから、スレッド間の通信メカニズム(wait() と notify() など)を介して、結果をメインスレッドに返します。
Thread thread = new Thread(() -> {
// 执行耗时操作
String result = longRunningOperation();
// 将结果发送给主线程
synchronized (lock) {
this.result = result;
lock.notify();
}
});
thread.start();
// 主线程等待结果
synchronized (lock) {
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(result);
- コールバックインターフェイス: コールバックメソッドを定義し、時間がかかる処理が完了するとコールバックメソッドを呼び出して、コールバックメソッドに結果のパラメータを渡す。
public interface Callback {
void onComplete(String result);
}
public class LongRunningOperation {
public void execute(Callback callback) {
// 执行耗时操作
String result = longRunningOperation();
// 调用回调方法
callback.onComplete(result);
}
}
// 使用回调接口
LongRunningOperation operation = new LongRunningOperation();
operation.execute(result -> System.out.println(result));
- 将来:使用 Future 接口,可以在提交任务时获得一个 Future 对象,通过此对象可以获取异步任务的执行结果。
ExecutorService executor = Executors.newSingleThreadExecutor();
Future<String> future = executor.submit(() -> {
// 执行耗时操作
return longRunningOperation();
});
// 主线程继续执行其他操作
// 获取异步操作的结果
String result = future.get();
System.out.println(result);
executor.shutdown();
- CompletableFuture: 新たなJava 8の非同期プログラミングツールは、非同期処理の合成、異常処理、タイムアウトなどの高度な機能を備えています。
CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
// 执行耗时操作
return longRunningOperation();
});
// 主线程继续执行其他操作
// 异步操作完成后的处理
future.thenAccept(result -> System.out.println(result));
具体的な要望や状況に合った方法を選択し、非同期プログラミングを行ってください。以下は非同期呼び出しの実装の一般的な方法を示します。