Javaスレッド割り込みタイムアウト例外(InterruptedTimeoutException)の解決方法
Java スレッド割り込みタイムアウト例外 (InterruptedTimeoutException) を解決する方法
はじめに:
並行プログラミングでは、スレッド割り込み操作は非常に一般的な技術手段です。実行する必要がなくなったスレッドを終了したり、複数のスレッド間を調整したりするために使用できます。ただし、スレッドの中断が必ずしもスムーズに完了するとは限らず、中断タイムアウトが発生する場合があります。この記事では、Java スレッド割り込みタイムアウト例外 (InterruptedTimeoutException) を解決する方法と、関連するコード例を紹介します。
1. 割り込みタイムアウトの原因の分析:
スレッド割り込み操作は通常、非同期操作です。つまり、スレッド割り込みフラグはすぐに true に設定されますが、スレッドがすぐにタイムアウトするわけではありません。実行を停止します。スレッドが正常に中断できるかどうかは、スレッド自体の設計と現在の実行ステータスによって異なります。スレッドを中断して一定時間内にスレッドが停止するのを待つ必要がある場合、スレッドが指定時間内に実行を停止できなかった場合、割り込みタイムアウト例外 (InterruptedTimeoutException) がスローされます。
2. 解決策:
Java スレッド割り込みタイムアウト例外を解決する主な方法は次のとおりです:
- Thread.join (長いタイムアウト) メソッドを使用します:
Thread クラスの join(long timeout) メソッドを使用してスレッドを待つことができます。呼び出し側スレッドがこのメソッドを実行した後、呼び出されたスレッドが終了するか、指定されたタイムアウトに達するまで待機します。スレッドがタイムアウト期間内に終了した場合は true を返し、それ以外の場合は false を返します。この方法により、スレッド中断タイムアウト状況を効果的に解決できます。
サンプル コードは次のとおりです。
Thread thread = new Thread(() -> { // 线程执行的逻辑代码 }); thread.start(); // 启动线程 try { thread.join(1000); // 线程最多等待1秒钟 } catch (InterruptedException e) { // 处理中断异常 } if (thread.isAlive()) { thread.interrupt(); // 如果线程还未结束,手动中断 }
- Future.get(long timeout, TimeUnit Unit) メソッドを使用します。
別の解決策は、Java を使用することです。同時実行ライブラリ Future と ExecutorService。 Future インターフェースは非同期計算の結果を表し、get(long timeout, TimeUnit Unit) メソッドでタイムアウトを設定できます。指定されたタイムアウト期間内にタスクが完了しない場合、タイムアウト例外がスローされ、操作が中断されます。
サンプル コードは次のとおりです:
ExecutorService executor = Executors.newSingleThreadExecutor(); Future<?> future = executor.submit(() -> { // 线程执行的逻辑代码 // 注意,此处不能使用while循环等待线程中断,否则可能导致线程无法正确中断 }); try { future.get(1000, TimeUnit.MILLISECONDS); // 最多等待1秒钟 } catch (InterruptedException | ExecutionException | TimeoutException e) { // 处理中断异常 future.cancel(true); // 如果超时,手动取消任务 } executor.shutdown(); // 关闭线程池
- 割り込みフラグと待機タイムアウト メカニズムをカスタマイズします:
特殊なケースでは、割り込みのカスタマイズが必要になる場合があります。フラグと待機タイムアウトのメカニズム。 volatile で変更されたブール型変数を割り込みフラグとして使用し、スレッドの実行中にポーリングしてフラグを決定し、タイムアウト条件が満たされたときに手動でスレッドを割り込むことができます。
サンプル コードは次のとおりです:
volatile boolean interrupted = false; Thread thread = new Thread(() -> { while (!interrupted) { // 线程执行的逻辑代码 } }); thread.start(); // 启动线程 try { Thread.sleep(1000); // 等待1秒钟 } catch (InterruptedException e) { // 处理中断异常 } interrupted = true; // 设置中断标志 thread.interrupt(); // 中断线程
概要:
上記は、Java スレッドの割り込みタイムアウト例外 (InterruptedTimeoutException) を解決するための 3 つの一般的な方法です。 Thread.join() メソッド、Future.get() メソッド、またはカスタムの割り込みフラグと待機タイムアウトのメカニズムを使用することにより、スレッド割り込み操作のタイムアウトによって引き起こされる例外を回避し、柔軟で信頼性の高いスレッド割り込みを実現できます。
ただし、スレッド割り込み操作を使用する場合は、スレッドの安全で信頼性の高い操作を確保するために、デッドロックや競合状態などの同時実行性の問題を回避することにも注意する必要があります。
参考資料:
- Oracle 公式ドキュメント - https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
- Oracle 公式ドキュメント - https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html
以上がJavaスレッド割り込みタイムアウト例外(InterruptedTimeoutException)の解決方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Steam は、ユーザーがゲームを購入、ダウンロード、プレイできる世界的に有名なゲーム プラットフォームです。ただし、Steam の使用中にエラー コード 118 などの問題が発生する場合があります。この記事では、この問題とその解決方法について説明します。まず、エラーコード 118 の意味を理解しましょう。 Steam にログインしようとすると、エラー コード 118 が表示されます。これは、コンピュータが Steam サーバーに接続できないことを意味します。これは、ネットワークの問題、ファイアウォール設定、プロキシ設定、または

Win11 システムに中国語言語パックをインストールできない問題の解決策 Windows 11 システムの発売に伴い、多くのユーザーは新しい機能やインターフェイスを体験するためにオペレーティング システムをアップグレードし始めました。ただし、一部のユーザーは、アップグレード後に中国語の言語パックをインストールできず、エクスペリエンスに問題が発生したことに気づきました。この記事では、Win11 システムに中国語言語パックをインストールできない理由について説明し、ユーザーがこの問題を解決するのに役立ついくつかの解決策を提供します。原因分析 まず、Win11 システムの機能不全を分析しましょう。

Steam を使用してゲームをダウンロード、アップデート、またはインストールすると、さまざまなエラーコードが頻繁に発生します。その中でよくあるエラーコードはE20です。このエラー コードは通常、Steam クライアントがゲームを更新しようとして問題が発生していることを意味します。ただし幸いなことに、この問題を解決するのはそれほど難しくありません。まず、エラー コード E20 を修正するには、次の解決策を試してください。 1. Steam クライアントを再起動します: Steam クライアントを直接再起動すると、この問題が解決できる場合があります。 Steam ウィンドウ内

スマートフォン技術が発展し続けるにつれて、携帯電話は私たちの日常生活においてますます重要な役割を果たしています。 Black Shark フォンは、ゲーム パフォーマンスに重点を置いたフラッグシップ フォンとして、プレイヤーから高い支持を得ています。ただし、場合によっては、Black Shark 携帯電話の電源が入らないという状況にも直面するため、この問題を解決するために何らかの措置を講じる必要があります。次に、Black Shark 携帯電話の電源が入らない問題を解決する方法を説明する 5 つのヒントを共有しましょう: ステップ 1: バッテリー残量を確認する まず、Black Shark 携帯電話に十分な電力があることを確認します。携帯電話のバッテリーが消耗している可能性があります

コンピューターがドライバーを読み込めない場合、デバイスが正しく動作しないか、コンピューターと正しく対話できない可能性があることは誰もが知っています。では、このデバイスにドライバーをロードできないことを示すプロンプト ボックスがコンピューターに表示された場合、問題を解決するにはどうすればよいでしょうか?以下のエディタでは、問題を簡単に解決する 2 つの方法を説明します。このデバイスにドライバーをロードできません 解決策 1. スタート メニューで「カーネル分離」を検索します。 2. メモリの整合性をオフにします。上記のメッセージには、「メモリの整合性がオフになっています。デバイスは脆弱である可能性があります。」というメッセージが表示されます。戻るボタンをクリックして無視してください。使用には影響しません。 3. マシンを再起動すると、問題が解決することがあります。

ソーシャルメディアの継続的な発展に伴い、Xiaohongshu はますます多くの若者が自分たちの生活を共有し、美しいものを発見するためのプラットフォームとなっています。多くのユーザーは、画像を投稿する際の自動保存の問題に悩まされています。では、この問題をどうやって解決すればよいでしょうか? 1.小紅書で公開するときに写真が自動的に保存される問題を解決するにはどうすればよいですか? 1. キャッシュをクリアする まず、Xiaohongshu のキャッシュ データをクリアしてみます。手順は次のとおりです: (1) 小紅書を開いて右下隅の「マイ」ボタンをクリックします。 (2) 個人センター ページで「設定」を見つけてクリックします。 (3) 下にスクロールして「」を見つけます。 「キャッシュをクリア」オプションを選択し、「OK」をクリックします。キャッシュをクリアした後、Xiaohongshu を再起動し、写真を投稿して、自動保存の問題が解決されるかどうかを確認します。 2. 小紅書バージョンを更新して、小紅書が正しく動作することを確認します。

Linux の中国語の文字化け問題は、中国語の文字セットとエンコーディングを使用する場合によく見られる問題です。文字化けは、ファイルのエンコード設定が正しくない、システム ロケールがインストールまたは設定されていない、端末の表示設定エラーなどが原因で発生する可能性があります。この記事では、いくつかの一般的な回避策を紹介し、具体的なコード例を示します。 1. ファイルのエンコード設定を確認します。ファイルのエンコードを表示するには file コマンドを使用します。ターミナルで file コマンドを使用して、ファイルのエンコードを表示します: file-ifilename。出力に「charset」がある場合

タイトル: PyCharmが開けない問題の解決方法 PyCharmは強力なPython統合開発環境ですが、時々PyCharmが開けない問題に遭遇することがあります。この記事では、一般的な回避策をいくつか紹介し、具体的なコード例を示します。この問題に遭遇した方のお役に立てれば幸いです。方法 1: キャッシュをクリアする PyCharm のキャッシュ ファイルにより、プログラムが正常に開けなくなることがあります。この問題を解決するには、キャッシュをクリアしてみてください。道具
