다른 유형의 작업 풀은 예약된 작업 풀입니다. 이름으로 판단하면 이 유형을 사용하여 특정 작업을 시작해야 하는 시기를 예약한다고 가정할 수 있습니다.
이 유형의 서비스는 일정 시간이 경과한 후 활동을 시작하는 작업이 있거나 반복 작업을 예약하려는 경우에 유용합니다.
하나를 사용하려면 Executors.newScheduledThreadPool(1) 을 호출합니다 .
나중에 매개 변수에 대해 이야기하겠습니다. 그러나 지금 우리가 알아야 할 것은 이 메서드가 호출될 때 ScheduledExecutorService 객체를 얻는다는 것입니다.
ScheduledExecutorService 는 ExecutorService를 확장하는 인터페이스입니다.
이 인터페이스에는 다음 메서드가 나타납니다.
방법 | 설명 |
---|---|
|
지정된 지연 후에 실행되는 일회성 작업을 만들고 실행합니다. |
|
생성 및 실행예정된 미래지정된 지연 후에 실행되는 개체입니다. |
|
지정된 초기 지연 후 먼저 실행된 다음 지정된 기간 후에 다시 실행되는 반복 작업을 만들고 실행합니다. 즉, 실행은 initialDelay 다음 에 initialDelay + period , initialDelay + 2 * period 등으로 시작됩니다. |
|
지정된 초기 지연 후 먼저 실행된 다음 한 실행 완료와 다음 실행 시작 사이의 지정된 지연으로 다시 실행되는 반복 작업을 만들고 실행합니다. |
따라서 인터페이스를 통해 일정한 간격으로 또는 약간의 지연 후에 작업을 실행할 수 있습니다.
newScheduledThreadPool 메서드에 대해 자세히 알아보세요.
여러 가지 방법으로 호출할 수 있습니다.
|
corePoolSize는 유휴 상태인 경우에도 풀에 유지할 스레드 수입니다. |
|
corePoolSize는 유휴 상태인 경우에도 풀에 유지할 스레드 수입니다. threadFactory 는 새 스레드를 만들 때 사용할 팩터리입니다. |
두 방법 모두 지정된 지연 후 또는 주기적으로 실행할 작업을 예약할 수 있는 스레드 풀을 만듭니다.
ScheduledThreadPool이 어떻게 작동하는지 보기 위해 예제를 살펴보겠습니다 .
예를 들어 5초마다 이메일을 확인하는 작업이 있지만 이 확인이 기본 프로그램에 영향을 주어서는 안 되며 추가 리소스의 잠재적인 소비를 수반한다고 가정합니다.
이메일 확인을 시뮬레이트하는 작업 클래스가 있습니다.
public class Task implements Runnable {
@Override
public void run() {
System.out.println("Checking email...");
}
}
다음으로 스레드 풀을 만들고 확인을 예약합니다.
ScheduledExecutorService executorService = Executors.newScheduledThreadPool(2);
executorService.scheduleAtFixedRate(new Task(), 0, 5, TimeUnit.SECONDS);
출력에서 5초마다 다음이 표시됩니다.
일반적으로 이러한 풀을 사용하여 예에서와 같이 주기적인 "하우스키핑" 작업을 수행할 수 있습니다. 하우스키핑 작업은 주 프로그램이 수행하는 작업과 관계없이 수행되어야 하는 작업입니다.
GO TO FULL VERSION