Java 開発でスレッド待機タイムアウト割り込み例外を処理する方法
Java 開発では、特に同時タスクを処理する場合、スレッドの使用が非常に一般的です。ただし、スレッドの待機タイムアウトや中断によって問題が発生する可能性があるため、これらの例外は慎重に処理する必要があります。この記事では、Java開発におけるスレッド待機タイムアウトと割り込み例外の処理方法を紹介します。
1. スレッド待機タイムアウト
Java では、オブジェクトの wait メソッドと notification メソッドを使用できます。オブジェクトクラス スレッドの待機と起動を実現します。 wait メソッドはスレッドを待機状態にすることができ、notify メソッドは待機中のスレッドをウェイクアップすることができます。
タスクの完了を待つときは、wait メソッドを使用してタイムアウトを設定できます。つまり、スレッドは一定時間待機した後に自動的に起動します。例:
synchronized (lock) { long startTime = System.currentTimeMillis(); while (!task.isDone()) { lock.wait(timeout); if (System.currentTimeMillis() - startTime > timeout) { break; // 超时,跳出循环 } } }
待機中に、タスクが完了したかどうかも確認する必要があります。完了していれば、ループから抜け出すことができます。これにより、スレッドが無制限に待機することがなくなります。
Java の ExecutorService は、スレッド待機タイムアウトを処理するためのより高度な方法を提供します。 submit メソッドを使用して Callable タスクを送信し、Future オブジェクトを返すことができます。
Future オブジェクトを使用してタスクの実行結果を取得したり、タイムアウトを設定したりできます。例:
ExecutorService executor = Executors.newSingleThreadExecutor(); Future<String> future = executor.submit(new Callable<String>() { @Override public String call() throws Exception { // 执行任务 return "Task result"; } }); try { String result = future.get(timeout, TimeUnit.MILLISECONDS); // 处理任务结果 } catch (InterruptedException | ExecutionException | TimeoutException e) { // 处理异常 } finally { executor.shutdown(); }
future.get() メソッドを使用してタスクの結果を取得する場合、タイムアウトを設定できます。設定時間を超過した場合はTimeoutExceptionがスローされます。
2. スレッドの中断
Java スレッドには、スレッドを中断するための割り込みメソッドが用意されています。このメソッドは、スレッドを中断する必要があるときに呼び出すことができます。
スレッドの中断を処理する場合、Thread の isInterrupted メソッドを使用して、スレッドが中断されているかどうかを確認し、それに応じて処理できます。例:
while (!Thread.currentThread().isInterrupted()) { // 执行任务 }
ループ内で、スレッドの割り込みステータスを継続的にチェックし、スレッドが割り込まれた場合はループから抜け出すことができます。
ExecutorService を使用してスレッド プールを管理する場合、shutdownNow メソッドを使用して実行中のタスクを中断し、未完了のタスクのリストを返すことができます。例:
ExecutorService executor = Executors.newSingleThreadExecutor(); executor.execute(new Runnable() { @Override public void run() { while (!Thread.currentThread().isInterrupted()) { // 执行任务 } } }); List<Runnable> unfinishedTasks = executor.shutdownNow();
shutdownNow メソッドを呼び出した後、未完了のタスクはすべて中断され、未完了のタスクのリストが返されます。
概要:
Java 開発では、スレッド待機タイムアウトと割り込み例外を処理することが非常に重要です。これらの例外を処理するには、オブジェクトの待機メソッドと通知メソッド、Future インターフェイスと Callable インターフェイス、スレッドの割り込みメソッド、および ExecutorService を使用できます。スレッド待機のタイムアウトと割り込みを適切に処理することで、プログラムの安定性と信頼性を高めることができます。
以上がJava開発におけるスレッド待機タイムアウト割り込み例外の処理方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。