第4章 非同期 API

4.1. 非同期 API

Red Hat JBoss Data Grid は同期 API メソッドの他に、非ブロッキング方式で同じ機能を実現する非同期 API も提供します。

非同期メソッドの命名規則は、同期メソッドの命名規則と似ていますが、各メソッド名の初めに Async が追加されます。非同期メソッドは、操作の結果が含まれる Future を返します。

たとえば、Cache<String, String> とパラメーター化されたキャッシュでは、Cache.put(String key, String value)String を返します。また、Cache.putAsync(String key, String value)FutureString を返します。

4.2. 非同期 API の利点

非同期 API はブロックしないため、以下のような複数の利点があります。

  • 同期通信が保証される (エラーと例外を処理する機能が追加される)。
  • 呼び出しが完了するまでスレッドの操作をブロックする必要がない。

これらの利点により、以下のようにシステムで並列処理を向上させることができます。

非同期 API の使用

Set<Future<?>> futures = new HashSet<Future<?>>();
futures.add(cache.putAsync("key1", "value1"));
futures.add(cache.putAsync("key2", "value2"));
futures.add(cache.putAsync("key3", "value3"));

たとえば、以下の行は実行時にスレッドをブロックしません。

  • futures.add(cache.putAsync(key1, value1));
  • futures.add(cache.putAsync(key2, value2));
  • futures.add(cache.putAsync(key3, value3));

これら 3 つの put 操作からのリモートコールは同時に実行されます。これは、分散モードで実行する場合に特に役に立ちます。

4.3. 非同期プロセス

Red Hat JBoss Data Grid の一般的な書き込み操作では、以下のプロセスがクリティカルパスで失敗し、リソースが最も必要なものから必要でないものに順序付けされます。

  • ネットワークコール
  • マーシャリング
  • キャッシュストアへの書き込み (オプション)
  • ロック

Red Hat JBoss Data Grid では、非同期メソッドを使用すると、クリティカルパスからネットワークコールとマーシャリングが削除されます。

4.4. 戻り値と非同期 API

Red Hat JBoss Data Grid で非同期 API が使用された場合、クライアントコードでは以前の値を問い合わせるために非同期操作が Future または CompletableFuture を返す必要があります。

非同期操作の結果を取得するには、次の操作を呼び出します。この操作は呼び出されたときにスレッドをブロックします。

Future.get()