> Java > java지도 시간 > ExecutorService는 TimerTask에 대한 스레드 시간 초과 처리를 어떻게 향상시킬 수 있습니까?

ExecutorService는 TimerTask에 대한 스레드 시간 초과 처리를 어떻게 향상시킬 수 있습니까?

Linda Hamilton
풀어 주다: 2024-12-20 05:01:12
원래의
845명이 탐색했습니다.

How Can ExecutorService Improve Thread Timeout Handling Over TimerTask?

스레드 시간 초과: 대체 접근 방식

TimerTask는 스레드 내에서 시간 초과를 처리할 수 있지만 가장 최적의 솔루션은 아닙니다. 대신 스레드 관리 및 시간 초과에 대한 포괄적인 접근 방식을 제공하는 ExecutorService를 사용해 보세요.

ExecutorService를 사용하면 호출 가능한 작업을 생성하고 실행을 위해 제출할 수 있습니다. 제출된 작업은 Future 개체를 통해 모니터링할 수 있습니다. Future#get() 메서드에 시간 제한을 지정하면 예외가 발생하기 전에 스레드가 실행되어야 하는 시간을 제어할 수 있습니다.

다음은 구현 예입니다.

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

public class Test {
    public static void main(String[] args) throws Exception {
        ExecutorService executor = Executors.newSingleThreadExecutor();
        Future<String> future = executor.submit(new Task());

        try {
            System.out.println("Started..");
            System.out.println(future.get(3, TimeUnit.SECONDS));
            System.out.println("Finished!");
        } catch (TimeoutException e) {
            future.cancel(true);
            System.out.println("Terminated!");
        }

        executor.shutdownNow();
    }
}

class Task implements Callable<String> {
    @Override
    public String call() throws Exception {
        // Replace this with your long-running task.
        Thread.sleep(4000);
        return "Ready!";
    }
}
로그인 후 복사

여기서 시나리오에서는 작업이 완료되기 전에 4초 동안 실행됩니다. 제한 시간을 5초로 늘리면 작업이 종료되지 않고 완료됩니다. 시간 초과가 더 짧은 기간으로 설정되면 TimeoutException이 발생하고 작업이 취소됩니다.

장기 실행 작업 내에서 스레드 중단을 확인하려면 while(!Thread.interrupted()를 사용하세요. ) { ... } 루프. 이렇게 하면 필요할 때 작업이 정상적으로 종료될 수 있습니다.

위 내용은 ExecutorService는 TimerTask에 대한 스레드 시간 초과 처리를 어떻게 향상시킬 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿