1

urlconnection を切断したり、bufferedreader を閉じたりせずに、urlconnection または bufferedreader を開始したエグゼキュータ サービスをシャットダウンすると、メモリが失われ、CPU の速度が低下しますか?

4

2 に答える 2

3

Executor をシャットダウンしても、すでにビジー状態のスレッドは終了しません。それらは完了するまで実行されます(または割り込みを使用して正常にシャットダウンします)。そのため、すべてのリソースが適切にクリーンアップされます (finally ブロックをどこかで見逃していない限り)。ランナブルが InterruptedException (およびその他の例外) を適切に処理するようにするのは、ユーザーの責任です。

于 2012-09-27T03:13:41.390 に答える
1

URLConnectionクラスには、定義済みのタイムアウトが付属しています。を使用してタイムアウトを指定できます

    connection.setReadTimeout(2000);
    connection.setConnectTimeout(2000);

Java doc自体が保証を提供していないため、これが機能するという保証はありません。

URLConnection#setConnectTimeout

URLConnection#setReadTimeout

このメソッドの一部の非標準実装では、指定されたタイムアウトが無視されます。設定された読み取りタイムアウトを確認するには、getReadTimeout() を呼び出してください。

したがって、この場合、適切なタイムアウトを指定しない限り、中断は機能しません。

ExecutorService#shutdownNow()は、スレッドを中断することによって即時にシャットダウンする方法を提供しますが、これらのスレッドは中断できないため、追加の利点はありません。

スレッドが割り込みポリシーを定義し、割り込み可能な操作を実行する場合にのみメリットがあります。

于 2012-09-27T04:40:12.597 に答える