Javaスレッドのタイムアウトで自動的に閉じる方法は何ですか?

Javaでは、ExecutorServiceを使用してスレッドのタイムアウトを制御し、スレッドを自動的にシャットダウンすることができます。以下はサンプルコードです:

import java.util.concurrent.*;

public class ThreadTimeoutExample {

    public static void main(String[] args) {
        ExecutorService executor = Executors.newSingleThreadExecutor();

        try {
            Future<String> future = executor.submit(new Callable<String>() {
                @Override
                public String call() throws Exception {
                    // 在这里执行耗时操作
                    Thread.sleep(5000);
                    return "Task completed";
                }
            });

            try {
                String result = future.get(3, TimeUnit.SECONDS); // 设置超时时间为3秒
                System.out.println(result);
            } catch (TimeoutException e) {
                System.out.println("Task timed out and will be cancelled");
                future.cancel(true); // 取消任务
            }
        } catch (InterruptedException | ExecutionException e) {
            e.printStackTrace();
        } finally {
            executor.shutdown();
        }
    }
}

例えば、ExecutorServiceを使用して、5秒かかるタスクを提出する単一スレッドプールを作成しました。Futureのgetメソッドでタイムアウトを3秒に設定し、指定された時間内にタスクが完了しない場合はTimeoutExceptionがスローされ、タスクがキャンセルされます。最後に、ExecutorServiceのshutdownメソッドを呼び出してスレッドプールを閉じることを忘れないでください。

コメントを残す 0

Your email address will not be published. Required fields are marked *