クラスHttpClient

java.lang.Object
java.net.http.HttpClient
すべての実装されたインタフェース:
AutoCloseable

public abstract class HttpClient extends Object implements AutoCloseable
HTTPクライアント。

HttpClientを使用して「リクエスト」を送信し、「レスポンス」を取得できます。 builderを介して HttpClientが作成されます。 newBuilderメソッドは、デフォルトのHttpClient実装のインスタンスを作成するビルダーを返します。 ビルダーは、リダイレクト、プロキシ、オーセンティケータに従うかどうかなど、優先プロトコルバージョン( HTTP/1.1、HTTP/2またはHTTP/3 )のようにクライアントごとの状態を構成するために使用できます。一度構築されると、HttpClientは不変になり、複数のリクエストを送信するために使用できます。

HttpClientは、すべてのリクエストの構成情報とリソース共有を提供します。 HttpClientインスタンスは、通常、独自の接続プールを管理します。その後、必要に応じて再利用できます。 通常、接続プールはHttpClientインスタンス間で共有されません。 可能なかぎり、操作ごとに新しいクライアントを作成すると、通常、そのような接続の再利用が防止されます。

HttpRequestが送信されるたびにBodyHandlerを指定する必要があります。 BodyHandlerは、レスポンス本文(存在する場合)の処理方法を決定します。 HttpResponseを受信すると、ヘッダー、レスポンス・コードおよび本文(typically)を使用できます。 レスポンス本文のバイトが読み取られたかどうかは、レスポンス本文のタイプ(T)によって決まります。

リクエストは同期または非同期のいずれかで送信できます。

  • send(HttpRequest, BodyHandler)ブロックは、リクエストが送信されてレスポンスが受信されるまでブロックされます。
  • sendAsync(HttpRequest, BodyHandler)がリクエストを送信し、レスポンスを非同期に受信します。 sendAsyncメソッドは、すぐにCompletableFuture<HttpResponse>を返します。 レスポンスが使用可能になると、 CompletableFutureが完了します。 返されたCompletableFutureは、様々な方法で結合して複数の非同期タスク間の依存性を宣言できます。

同期の例

HttpClient client = HttpClient.newBuilder()
     .version(Version.HTTP_1_1)
     .followRedirects(Redirect.NORMAL)
     .connectTimeout(Duration.ofSeconds(20))
     .proxy(ProxySelector.of(new InetSocketAddress("proxy.example.com", 80)))
     .authenticator(Authenticator.getDefault())
     .build();

HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://foo.com/"))
    .build();
HttpResponse<String> response = client.send(request, BodyHandlers.ofString());
System.out.println(response.statusCode());
System.out.println(response.body());

非同期の例

HttpRequest request = HttpRequest.newBuilder()
     .uri(URI.create("https://foo.com/"))
     .timeout(Duration.ofMinutes(2))
     .header("Content-Type", "application/json")
     .POST(BodyPublishers.ofFile(Paths.get("file.json")))
     .build();
client.sendAsync(request, BodyHandlers.ofString())
     .thenApply(HttpResponse::body)
     .thenAccept(System.out::println);

APIのノート:
HttpClientによって割り当てられたリソースは、クライアント「閉じる」によって早期に再利用できます。
実装上のノート:

HttpResponse.BodyHandlersクラスとHttpResponse.BodySubscribersクラスには、本文データをコール元にストリームして戻すことができるBodyHandlerおよびBodySubscriber実装のストリーミングまたは公開」が用意されています。 これらのストリームに関連付けられたリソースを再利用し、HTTPリクエストが完了したとみなすには、コール元が最終的に「ストリーミング・レスポンス本文の取得」を実行して、返されたストリームを閉じるか、取り消すか、読み取る必要があります。 同様に、カスタムのHttpResponse.BodySubscriber実装では、onCompleteまたはonErrorがシグナルを受信するまで、すべてのデータをrequestするか、最終的にそのサブスクリプションをcancelする必要があります。

HttpClientのJDK組込み実装は、ベスト・エフォート実装を提供するために、close()shutdown()shutdownNow()awaitTermination(Duration)およびisTerminated()をオーバーライドします。 streaming or publishing bodiesのクローズ、取消または読取りに失敗すると、リクエストを開いたままにし、「正常な停止を停止」でデータの配信が停止する場合があります。 shutdownNow()メソッド(コールされた場合)は、このような未完了のリクエストを取り消そうとしますが、操作の実行時に突然終了する場合があります。

「明示的に閉じました」でない場合、HttpClientインスタンスが強く到達できなくなり、そのインスタンスで起動されたすべての操作が完了すると、HttpClientのJDK組込み実装によってそのリソースが解放されます。 これは、ガベージ・コレクタの両方に依存して、インスタンスがアクセスできなくなったこと、およびクライアントで起動されたすべてのリクエストで最終的に完了することを通知します。 「ストリーミングまたはパブリッシュ・ボディ」を適切にクローズしないと、関連するリクエストの実行から完了までが妨げられ、関連付けられたクライアントによって割り当てられたリソースがガベージ・コレクタによって再利用されない場合があります。

HttpClientのデフォルト実装では、HTTP/1.1、HTTP/2およびHTTP/3がサポートされます。 リクエストの送信時に実際に使用されるプロトコルのバージョンは、複数の要因に依存する場合があります。 HTTP/2の場合、成功する初期アップグレード(プレーン接続を使用する場合)またはTransport Layer Security (TLS)ハンドシェイク中に正常にネゴシエーションされるHTTP/2に依存する場合があります。

クリアな接続で HTTP/2が選択され、元のサーバーへのHTTP/2接続がすでに存在しない場合、クライアントは新しい接続を作成し、HTTP/1.1からHTTP/2へのアップグレードを試みます。 アップグレードが成功した場合、このリクエストに対するレスポンスはHTTP/2を使用します。 アップグレードが失敗した場合、レスポンスはHTTP/1.1を使用して処理されます。

その他の制約は、プロトコルバージョンの選択にも影響する可能性があります。 たとえば、プロキシを介してHTTP/2がリクエストされ、実装がこのモードをサポートしない場合は、HTTP/1.1を使用できます。

HTTP/3プロトコルはデフォルトでは選択されていませんが、HttpClient優先バージョンまたはHttpRequest優先バージョンHTTP/3に設定することで有効にできます。 HTTP/2と同様、HTTP/3が有効になっているときに実際に使用されるプロトコルバージョンは、いくつかの要因に依存します。 構成ヒント提供すると、HTTP/3プロトコルが有効な場合に、HttpClient実装がHTTP交換を確立および実行する方法を決定しやすくなります。 構成ヒントが指定されていない場合、HttpClientは、H3_DISCOVERYオプションAPIドキュメントの説明に従って、いずれかを選択します。
URIスキーム"https"ではないリクエストは、HTTP/3を介して送信されないことに注意してください。
この実装では、プロキシが選択されている場合、HTTP/3は使用されません。

HttpClientの具象インスタンスがHTTP/3を介したリクエストの送信をサポートしていない場合、UnsupportedProtocolVersionExceptionがスローされるのは、優先バージョンがHTTP/3に設定されているクライアントをビルドするとき、またはHTTP_3_URI_ONLY指定されているときにHTTP/3が有効のリクエストを送信しようとするときです。 これは通常、クライアント・インスタンスで構成されたSSLContextまたはSSLParametersをHTTP/3とともに使用できない場合に発生します。

導入されたバージョン:
11
関連項目:
  • ネストされたクラスのサマリー

    ネストされたクラス
    修飾子と型
    クラス
    説明
    static interface 
    static enum 
    自動リダイレクション・ポリシーを定義します。
    static enum 
    HTTPプロトコルのバージョン。
  • コンストラクタのサマリー

    コンストラクタ
    修飾子
    コンストラクタ
    説明
    protected
    HttpClientを作成します。
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    このクライアントに設定されたAuthenticatorを含むOptionalを返します。
    boolean
    シャットダウン・リクエストの後にすべての操作の実行が完了するか、durationが経過するか、現在のスレッドがinterrupted(いずれか早い方)になるまでブロックします。
    void
    以前にsendまたはsendAsyncに送信されたリクエストが完了するまで実行されるが、新しいリクエストは受け入れられないように、正常な停止を開始します。
    abstract Optional<Duration>
    このクライアントの「接続タイムアウト時間」を含むOptionalを返します。
    このクライアントCookieHandlerを含むOptionalを返します。
    abstract Optional<Executor>
    このクライアントExecutorを含むOptionalを返します。
    このクライアントのフォロー・リダイレクト・ポリシーを返します。
    boolean
    停止後にすべての操作が完了した場合は、trueを返します。
    新しいHttpClientビルダーを作成します。
    static HttpClient
    デフォルト設定を使用して新しいHttpClientを返します。
    新しいWebSocketビルダー(オプションの操作)を作成します。
    このクライアントに提供されたProxySelectorを含むOptionalを返します。
    abstract <T> HttpResponse<T>
    send(HttpRequest request, HttpResponse.BodyHandler<T> responseBodyHandler)
    このクライアントを使用して指定されたリクエストを送信し、必要に応じてブロックしてレスポンスを取得します。
    sendAsync(HttpRequest request, HttpResponse.BodyHandler<T> responseBodyHandler)
    指定されたレスポンス本文ハンドラとともに、このクライアントを使用して、指定されたリクエストを非同期に送信します。
    sendAsync(HttpRequest request, HttpResponse.BodyHandler<T> responseBodyHandler, HttpResponse.PushPromiseHandler<T> pushPromiseHandler)
    指定されたレスポンス本文ハンドラとともにこのクライアントを使用して、指定されたリクエストを非同期に送信し、プッシュ・プロミス・ハンドラをプッシュします。
    void
    sendまたはsendAsyncで以前に送信されたリクエストが完了まで実行され、新しいリクエストは受け入れられないように、正常な停止を開始します。
    void
    このメソッドは、即時シャットダウンを開始しようとします。
    abstract SSLContext
    このクライアントのSSLContextを返します。
    abstract SSLParameters
    このクライアントのSSLParametersのコピーを返します。
    このクライアントの優先HTTPプロトコル・バージョンを返します。

    クラスオブジェクトで宣言されたメソッド

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    修飾子と型
    メソッド
    説明
    protected Object
    このオブジェクトのコピーを作成して、返します。
    boolean
    このオブジェクトと他のオブジェクトが等しいかどうかを示します。
    protected void
    削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。
    最終決定は非推奨であり、将来のリリースで削除される可能性があります。
    final Class<?>
    このObjectの実行時クラスを返します。
    int
    このオブジェクトに対するハッシュ・コード値を返します。
    final void
    このオブジェクトのモニターで待機中のスレッドを1つ再開します。
    final void
    このオブジェクトのモニターで待機中のすべてのスレッドを再開します。
    オブジェクトの文字列表現を返します。
    final void
    現在のスレッドが目覚めるまで待機します。通常、notifiedまたはinterruptedです。
    final void
    wait(long timeoutMillis)
    現在のスレッドは、通常、notifiedまたはinterruptedであるか、一定のリアルタイムが経過するまで、目覚めるまで待機します。
    final void
    wait(long timeoutMillis, int nanos)
    現在のスレッドは、通常、notifiedまたはinterruptedであるか、一定のリアルタイムが経過するまで、目覚めるまで待機します。
  • コンストラクタの詳細

    • HttpClient

      protected HttpClient()
      HttpClientを作成します。
  • メソッドの詳細

    • newHttpClient

      public static HttpClient newHttpClient()
      デフォルト設定を使用して新しいHttpClientを返します。

      newBuilder().build()と等価です。

      デフォルト設定には: "GET"リクエスト・メソッド、HTTP/2のプリファレンス、NEVERのリダイレクション・ポリシー、「デフォルト・プロキシ・セレクタ」および「デフォルトのSSLコンテキスト」

      実装上のノート:
      システム全体のデフォルト値は、HttpClientインスタンスの構築時に取得されます。 たとえば、ProxySelector.setDefault(ProxySelector)またはSSLContext.setDefault(SSLContext)をコールして、HttpClientインスタンスのビルド後にシステム全体の値を変更しても、すでにビルドされているインスタンスには影響しません。
      戻り値:
      新しいHttpClient
      スロー:
      UncheckedIOException - 「新しいHttpClientの構築」に必要な基礎となるIOリソースを割り当てることができない場合。
    • newBuilder

      public static HttpClient.Builder newBuilder()
      新しいHttpClientビルダーを作成します。

      このメソッドによって返されるビルダーは、デフォルトのHttpClient実装のインスタンスを作成します。

      戻り値:
      an HttpClient.Builder
    • cookieHandler

      public abstract Optional<CookieHandler> cookieHandler()
      このクライアントCookieHandlerを含むOptionalを返します。 このクライアントのビルダーでCookieHandlerが設定されていない場合、Optionalは空です。
      戻り値:
      このクライアントのCookieHandlerを含むOptional
    • connectTimeout

      public abstract Optional<Duration> connectTimeout()
      このクライアントの「接続タイムアウト時間」を含むOptionalを返します。 クライアント・ビルダーで「接続タイムアウト時間」が設定されていない場合、Optionalは空になります。
      戻り値:
      このクライアント接続のタイムアウト時間を含むOptional
    • followRedirects

      public abstract HttpClient.Redirect followRedirects()
      このクライアントのフォロー・リダイレクト・ポリシーを返します。 リダイレクト・ポリシーを指定しないビルダーによって構築されるクライアントのデフォルト値は、NEVERです。
      戻り値:
      このクライアントのフォロー・リダイレクト設定
    • proxy

      public abstract Optional<ProxySelector> proxy()
      このクライアントに提供されたProxySelectorを含むOptionalを返します。 このクライアントのビルダーでプロキシ・セレクタが設定されていない場合、Optionalは空です。

      このメソッドが空のオプションを返すこともありますが、HTTPリクエストの送信に使用される、 HttpClientには突然の「デフォルト・プロキシ・セレクタ」がある可能性があります。

      戻り値:
      このクライアントに提供されたプロキシ・セレクタを含むOptional
    • sslContext

      public abstract SSLContext sslContext()
      このクライアントのSSLContextを返します。

      このクライアントのビルダーでSSLContextが設定されていない場合は、「デフォルト・コンテキスト」が返されます。

      戻り値:
      このクライアントのSSLContext
    • sslParameters

      public abstract SSLParameters sslParameters()
      このクライアントのSSLParametersのコピーを返します。

      クライアントのビルダーでSSLParametersが設定されていない場合は、実装固有のデフォルトのパラメータ・セット(クライアントが使用するパラメータ)が返されます。

      戻り値:
      このクライアントのSSLParameters
    • authenticator

      public abstract Optional<Authenticator> authenticator()
      このクライアントに設定されたAuthenticatorを含むOptionalを返します。 クライアントのビルダーでAuthenticatorが設定されていない場合、Optionalは空です。
      戻り値:
      このクライアントのAuthenticatorを含むOptional
    • version

      public abstract HttpClient.Version version()
      このクライアントの優先HTTPプロトコル・バージョンを返します。 デフォルト値はHttpClient.Version.HTTP_2です。
      実装上のノート:
      HttpClientが最終的にリクエストに使用することを決定するプロトコル・バージョンは、プロトコル・バージョンの選択の項に記載されている様々な要因の影響を受けます。
      戻り値:
      リクエストされたHTTPプロトコルのバージョン
    • executor

      public abstract Optional<Executor> executor()
      このクライアントExecutorを含むOptionalを返します。 クライアントのビルダーでExecutorが設定されていない場合、Optionalは空です。

      このメソッドは空のオプションを返すかもしれませんが、 HttpClientには、非同期および依存タスクの実行に使用される「デフォルトのエグゼキュータ」がまだ公開されていないことがあります。

      戻り値:
      このクライアントのExecutorを含むOptional
    • send

      public abstract <T> HttpResponse<T> send(HttpRequest request, HttpResponse.BodyHandler<T> responseBodyHandler) throws IOException, InterruptedException
      このクライアントを使用して指定されたリクエストを送信し、必要に応じてブロックしてレスポンスを取得します。 返されたHttpResponse<T>には、レスポンス・ステータス、ヘッダーおよび本文(指定されたレスポンス本文ハンドラによって処理される)が含まれます。

      演算が中断された場合、デフォルトのHttpClient実装はHTTP交換を取り消そうとし、InterruptedExceptionがスローされます。 whenに関する正確な保証はありません。取消リクエストが考慮される可能性があります。 特に、リクエストの処理が別のスレッドですでに非同期的に開始されており、基礎となるリソースが非同期的にのみ解放される可能性があるため、リクエストがサーバーに送信される場合があります。

      • HTTP/1.1では、取り消そうとすると、基礎となる接続が突然閉じられる可能性があります。
      • HTTP/2では、取消しを試みると、ストリームがリセットされたり、特定の状況では、スレッドが基礎となるソケットに現在書き込もうとしている場合に、接続が突然クローズされることもあります。

      型パラメータ:
      T - レスポンス本文型
      パラメータ:
      request - リクエスト
      responseBodyHandler - レスポンス本文ハンドラ
      戻り値:
      レスポンス
      スロー:
      IOException - 送信または受信時にI/Oエラーが発生した場合、またはクライアントに「停止」がある場合
      InterruptedException - 操作が中断された場合
      IllegalArgumentException - request引数がHttpRequest.Builderで指定された有効に作成されたリクエストではない場合。
    • sendAsync

      public abstract <T> CompletableFuture<HttpResponse<T>> sendAsync(HttpRequest request, HttpResponse.BodyHandler<T> responseBodyHandler)
      指定されたレスポンス本文ハンドラとともに、このクライアントを使用して、指定されたリクエストを非同期に送信します。

      同等: sendAsync(request, responseBodyHandler, null)

      型パラメータ:
      T - レスポンス本文型
      パラメータ:
      request - リクエスト
      responseBodyHandler - レスポンス本文ハンドラ
      戻り値:
      a CompletableFuture<HttpResponse<T>>
      スロー:
      IllegalArgumentException - request引数がHttpRequest.Builderで指定された有効に作成されたリクエストではない場合。
    • sendAsync

      public abstract <T> CompletableFuture<HttpResponse<T>> sendAsync(HttpRequest request, HttpResponse.BodyHandler<T> responseBodyHandler, HttpResponse.PushPromiseHandler<T> pushPromiseHandler)
      指定されたレスポンス本文ハンドラとともにこのクライアントを使用して、指定されたリクエストを非同期に送信し、プッシュ・プロミス・ハンドラをプッシュします。

      戻されたcompletableは、将来正常に完了すると、レスポンス・ステータス、ヘッダーおよび本文(指定されたレスポンス本文ハンドラによって処理される)を含むHttpResponse<T>で完了します。

      「プッシュ・プロミス」がある場合は、所定のpushPromiseHandlerによって処理されます。 null値がpushPromiseHandlerである場合、プッシュ・プロミスは拒否されます。

      返された完了可能な未来は例外的に次のように完了します:

      • IOException - 送信または受信時にI/Oエラーが発生した場合、またはクライアントに「停止」がある場合。

      デフォルトのHttpClient実装は、cancelableであるCompletableFutureオブジェクトを返します。 取消可能な先日付からのCompletableFutureオブジェクトderivedは、それ自体がcancelableです。 完了していない取消し可能な将来、cancel(true)を起動すると、基礎となるリソースをできるだけ早く解放するためにHTTP交換の取消しが試行されます。 whenに関する正確な保証はありません。取消リクエストが考慮される可能性があります。 特に、リクエストの処理が別のスレッドですでに非同期的に開始されており、基礎となるリソースが非同期的にのみ解放される可能性があるため、リクエストがサーバーに送信される場合があります。

      • HTTP/1.1では、取り消そうとすると、基礎となる接続が突然閉じられる可能性があります。
      • HTTP/2では、取り消そうとするとストリームがリセットされることがあります。

      型パラメータ:
      T - レスポンス本文型
      パラメータ:
      request - リクエスト
      responseBodyHandler - レスポンス本文ハンドラ
      pushPromiseHandler - プッシュ・プロミス・ハンドラ。nullの可能性があります。
      戻り値:
      a CompletableFuture<HttpResponse<T>>
      スロー:
      IllegalArgumentException - request引数がHttpRequest.Builderで指定された有効に作成されたリクエストではない場合。
    • newWebSocketBuilder

      public WebSocket.Builder newWebSocketBuilder()
      新しいWebSocketビルダー(オプションの操作)を作成します。

      HttpClient client = HttpClient.newHttpClient();
      CompletableFuture<WebSocket> ws = client.newWebSocketBuilder()
         .buildAsync(URI.create("ws://websocket.example.com"), listener);

      カスタムのHttpClientを使用すると、WebSocketオープニング・ハンドシェイクの細かい制御が可能になります。

      InetSocketAddress addr = new InetSocketAddress("proxy.example.com", 80);
      HttpClient client = HttpClient.newBuilder()
              .proxy(ProxySelector.of(addr))
              .build();
      
      CompletableFuture<WebSocket> ws = client.newWebSocketBuilder()
              .buildAsync(URI.create("ws://websocket.example.com"), listener);

      実装要件:
      このメソッドのデフォルト実装はUnsupportedOperationExceptionをスローします。 newHttpClient()またはnewBuilder()で取得したクライアントは、WebSocket Builderを返します。
      実装上のノート:
      ビルダーとそれで作成されたWebSocketの両方が、非ブロッキングの方法で動作します。 つまり、それらのメソッドはCompletableFutureを返す前にブロックしません。 非同期タスクは、このHttpClientのエグゼキュータで実行されます。

      CompletionStageListener.onCloseから返されると、WebSocketは、受信したメッセージと同じコードを持ち、空の理由があるCloseメッセージを送信します。

      戻り値:
      a WebSocket.Builder
      スロー:
      UnsupportedOperationException - このHttpClientがWebSocketサポートを提供しない場合
    • shutdown

      public void shutdown()
      sendまたはsendAsyncで以前に送信されたリクエストが完了まで実行され、新しいリクエストは受け入れられないように、正常な停止を開始します。 完了までのリクエストの実行には、バックグラウンドで複数の操作(「レスポンスの配信待機中」など)の実行が含まれる場合があります。この操作はすべて、リクエストが完了したと見なされるまで完了まで実行する必要があります。 シャットダウン後に呼出しを実行しても、効果はありません。

      このメソッドは、以前に発行されたリクエストの実行が完了するまで待機しません。 これを行うには、awaitTerminationまたはcloseを使用します。

      実装要件:
      このメソッドのデフォルト実装では何の処理も行われません。 サブクラスは、適切な動作を実装するためにこのメソッドをオーバーライドする必要があります。
      導入されたバージョン:
      21
      関連項目:
    • awaitTermination

      public boolean awaitTermination(Duration duration) throws InterruptedException
      シャットダウン・リクエストの後にすべての操作の実行が完了するか、durationが経過するか、現在のスレッドがinterrupted(いずれか早い方)になるまでブロックします。 操作は、sendまたはsendAsyncで以前に送信されたリクエストを完了まで実行するために必要なタスクです。

      このメソッドは、待機期間がゼロ以下の場合は待機しません。 この場合、メソッドはスレッドが終了しているかどうかのみをテストします。

      実装要件:
      このメソッドのデフォルトの実装ではnull引数がチェックされますが、それ以外の場合は何もチェックされず、trueが返されます。 サブクラスは、適切な動作を実装するためにこのメソッドをオーバーライドする必要があります。
      パラメータ:
      duration - 最大待機時間
      戻り値:
      このクライアントが終了した場合はtrue、終了前にタイムアウトが経過した場合はfalse
      スロー:
      InterruptedException - 待機中に割込みが発生した場合
      導入されたバージョン:
      21
      関連項目:
    • isTerminated

      public boolean isTerminated()
      停止後にすべての操作が完了した場合は、trueを返します。 操作は、sendまたはsendAsyncで以前に送信されたリクエストを完了まで実行するために必要なタスクです。

      shutdownまたはshutdownNowのいずれかが最初に呼び出された場合を除き、isTerminatedtrueになることはありません。

      実装要件:
      このメソッドのデフォルトの実装では何も実行されず、falseが返されます。 サブクラスは、適切な動作を実装するためにこのメソッドをオーバーライドする必要があります。
      戻り値:
      停止後にすべてのタスクが完了した場合はtrue
      導入されたバージョン:
      21
      関連項目:
    • shutdownNow

      public void shutdownNow()
      このメソッドは、即時シャットダウンを開始しようとします。 このメソッドの実装は、アクティブに実行されている操作を中断しようとする場合があります。 操作は、sendまたはsendAsyncで以前に送信されたリクエストを完了まで実行するために必要なタスクです。 中断時のアクティブに実行されている操作の動作は未定義です。 特に、中断された操作が終了すること、またはこれらの操作を待機しているコードに通知される保証はありません。
      実装要件:
      このメソッドのデフォルトの実装では、単にshutdown()をコールします。 サブクラスは、適切な動作を実装するためにこのメソッドをオーバーライドする必要があります。
      導入されたバージョン:
      21
      関連項目:
    • close

      public void close()
      以前にsendまたはsendAsyncに送信されたリクエストが完了するまで実行されるが、新しいリクエストは受け入れられないように、正常な停止を開始します。 完了へのリクエストの実行には、「レスポンスの配信待機中」など、バックグラウンドでの複数の操作の実行が含まれる場合があります。 このメソッドは、すべての操作の実行が完了してクライアントが終了するまで待機します。

      待機中に中断された場合、このメソッドはshutdownNow()をコールしてすべての操作を停止しようとします。 その後、アクティブに実行されているすべての操作が完了するまで待機し続けます。 中断されたステータスは、このメソッドが戻る前に再度アサートされます。

      すでに終了している場合は、このメソッドを呼び出しても効果はありません。

      定義:
      close、インタフェースAutoCloseable
      実装要件:
      デフォルトの実装では、shutdown()が起動され、タスクがawaitTerminationを使用して実行を完了するまで待機します。
      導入されたバージョン:
      21
      関連項目: