Java 非同期インターフェースの実装方法

Javaでは、コールバック、Future、CompletableFuture などを使用して、非同期インターフェイスを実現できます。

  1. コールバック:コールバックインターフェイスを定義して、メソッドの実行完了後にコールバックメソッドを呼び出して結果を処理します。例えば:
public interface AsyncCallback {
    void onSuccess(Object result);
    void onFailure(Exception e);
}

public interface AsyncService {
    void doSomethingAsync(AsyncCallback callback);
}

public class AsyncServiceImpl implements AsyncService {
    @Override
    public void doSomethingAsync(AsyncCallback callback) {
        // 异步操作
        // 执行完毕后调用回调方法
        if (success) {
            callback.onSuccess(result);
        } else {
            callback.onFailure(exception);
        }
    }
}

// 使用
AsyncService asyncService = new AsyncServiceImpl();
asyncService.doSomethingAsync(new AsyncCallback() {
    @Override
    public void onSuccess(Object result) {
        // 处理成功结果
    }

    @Override
    public void onFailure(Exception e) {
        // 处理异常情况
    }
});
  1. 将来:Futureオブジェクトを使って非同期操作の結果を表すことができ、get()メソッドで結果を取得したり、isDone()メソッドで操作が完了したかを判断したりできる。例えば:
public interface AsyncService {
    Future<Object> doSomethingAsync();
}

public class AsyncServiceImpl implements AsyncService {
    @Override
    public Future<Object> doSomethingAsync() {
        ExecutorService executor = Executors.newFixedThreadPool(1);
        return executor.submit(() -> {
            // 异步操作
            return result;
        });
    }
}

// 使用
AsyncService asyncService = new AsyncServiceImpl();
Future<Object> future = asyncService.doSomethingAsync();
while (!future.isDone()) {
    // 等待操作完成
}
try {
    Object result = future.get();
    // 处理结果
} catch (InterruptedException | ExecutionException e) {
    // 处理异常情况
}
  1. CompletableFuture: 非同期プログラミングユーティリティでJava 8で導入され、非同期オペレーションの処理に利用できる豊富メソッドを提供します。例:
public interface AsyncService {
    CompletableFuture<Object> doSomethingAsync();
}

public class AsyncServiceImpl implements AsyncService {
    @Override
    public CompletableFuture<Object> doSomethingAsync() {
        CompletableFuture<Object> future = new CompletableFuture<>();
        // 异步操作
        // 执行完毕后设置结果或异常
        if (success) {
            future.complete(result);
        } else {
            future.completeExceptionally(exception);
        }
        return future;
    }
}

// 使用
AsyncService asyncService = new AsyncServiceImpl();
asyncService.doSomethingAsync().thenAccept(result -> {
    // 处理成功结果
}).exceptionally(e -> {
    // 处理异常情况
    return null;
});

非同期インターフェースを実装する一般的な方法をいくつか示します。実際的なニーズと状況に応じて、適切な方法を選択してください。

bannerAds