これは簡単なテスト プログラムです。メイン スレッドは、いくつかの子スレッドを開始します。メインに追加しました: Runtime.getRuntime().addShutdownHook(hookThread);
JVM プロセスで ^C が押されると、この hookThread はグローバル シャットダウン フラグを設定し、すべての子スレッドに対して interrupt() を呼び出します。
その後、すべての子スレッドを返したいのですが、HttpURLConnection.getInputStream() にある場合、interrupt() は子スレッドに対して何もしません。子スレッドはタイムアウト (30 秒) 後に戻りますが、これは私には遅すぎます。
HttpURLConnection.getInputStream() 呼び出しを即座に中断する最良の方法は何ですか?
interrupt() が呼び出された後、子スレッドのスタックの一番上をたどります。
"Thread-0" prio=10 tid=0x0000000040b0f800 nid=0x3eab runnable [0x000000004211b000]
java.lang.Thread.State: RUNNABLE
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:258)
at java.io.BufferedInputStream.read(BufferedInputStream.java:317)
- locked <0x00000000fd99ac88> (a java.io.BufferedInputStream)
at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:687)
at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:632)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1195)
- locked <0x00000000fd997670> (a sun.net.www.protocol.http.HttpURLConnection)
...