プロジェクトの大規模な並行性ボリュームのパフォーマンスの安定性を改善するために、スレッドプールを使用してマルチスレッドの非同期操作を実行することがよくあります。マルチスレッドには2つのタイプがあります。 1つは、返品値がない実行可能なインターフェイスを実装することであり、もう1つは、返品値を持つ呼び出し可能なインターフェイスを実装することです。
スレッドの1つがタイムアウトした場合、理論的には他のスレッドの実行結果に影響を与えるものではありませんが、プロジェクトで発生する問題は、1つのスレッドがブロックされ、他のスレッドによって返されるインターフェイスが空であることを示しています。実際、それは非常に簡単な質問ですが、初めて遭遇したので、しばらくの間それについて考えました。それは非常に簡単です、それはブロッキングラインのためです
プロセスはリリースされておらず、並行性の量が大きくなると、スレッドプールの数がいっぱいになるため、他のスレッドは待機状態になります。
添付されているのは、私が書いたデバッグコードです。問題を考えることができないとき、私はそれをシミュレートし、おそらく問題が発生するでしょう。
java.util.concurrent.callable; import java.util.concurrent.executionexception; import java.util.concurrent.executorservice; Import java.util.concurrent.executors; import java.util.concurrent.future; import java.util.current; import.util.util.current java.util.concurrent.timeoutexception; public class futuretest {public static void main(string [] args)throws arturnedexception、executionexception、timeoutexception {final executorservice execos = executors.newfixedthreadpool(1); callable <string> call = new callable <string>(){public string call()throws arturnedexception {//時間のかかる操作スレッドの実行を開始します。 「1つのスレッド実行が完了した」を返します。 "; }}; callable <string> call2 = new callable <string>(){public string call()throws exception {//時間のかかる操作の実行を開始// swree.sleep(1000 * 5); 「2つのスレッド実行が完了しました。 "; }}; callable <string> call3 = new callable <string>(){public string call()throws exception {//時間のかかる操作の実行を開始// swree.sleep(1000 * 5); 「3スレッドの実行が完了しました。 "; }}; future <string> future = exec.submit(call); future <string> future3 = exec.submit(call3); future <string> future2 = exec.submit(call2);文字列obj = "";文字列obj2 = "";文字列obj3 = ""; try {obj = future.get(500、timeunit.milliseconds); //タスク処理タイムアウトを} // 1秒のキャッチ(例外e){system.out.println( "Processing Timeout ....");に設定します。 e.printstacktrace(); } try {obj3 = future3.get(3000、timeunit.milliseconds); //タスクの処理タイムアウトを} // 1秒のキャッチ(例外e){system.out.println( "処理タイムアウト......");に設定します。 e.printstacktrace(); } try {obj2 = future2.get(3000、timeunit.milliseconds);} catch(exception e){system.out.println( "Processing Timeout ...."); e.printstacktrace(); } system.out.println( "3タスクが正常に戻ります:" + obj3); System.out.println( "2タスクが正常に戻ります:" + obj2); System.out.println( "1タスクが正常に戻ります:" + obj); exec.shutdown(); }}上記は、Javaでの非同期マルチスレッドタイムアウトによって引き起こされるサービスの例外の簡単な議論です。誰もがwulin.comをもっとサポートすることを願っています〜