[Java] 일정 시간 지난 후 코드 실행
June 10, 2024
일정 시간이 지난 후, 특정 코드를 실행시키는 방법에 대해서 알아보겠습니다.
1. Timer를 이용한 방법
특정 시간 후, 한번 실행
Timer.schedule(TimerTask, delay)는 delay 시간 후에 TimerTask의 run() 함수를 실행시킵니다.
- TimerTask는 람다식으로 전달할 수 있음
- delay의 시간 단위는 ms
아래 예제는 5초 뒤에 run() 함수가 실행됩니다.
import java.util.Timer;
import java.util.TimerTask;
public class Example {
public static void main(String[] args) {
Timer timer = new Timer();
long delay = 5000; // 5초 (5000ms)
// 5초 후 아래 함수가 한번만 실행됨
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println("Task executed.");
}
}, delay);
}
}Output:
Task executed.특정 주기로 반복 실행
Timer.scheduleAtFixedRate(TimerTask, delay, period)는 delay 뒤에 TimerTask의 함수가 실행되며, 그 이후에 period 시간 주기로 반복 실행됩니다.
아래 예제는 5초 후에 처음 함수가 호출되며, 그 이후에 10초 간격마다 함수가 주기적으로 호출됩니다.
import java.util.Timer;
import java.util.TimerTask;
public class Example {
public static void main(String[] args) {
Timer timer = new Timer();
long delay = 5000; // 5초 (5000ms)
long period = 10000; // 10초
// 5초 후 아래 함수가 처음 호출 되며, 10초 간격으로 반복 호출
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
System.out.println("Task executed.");
}
}, delay, period);
}
}Output:
Task executed.
Task executed.
Task executed.
Task executed.
...2. Executors를 이용한 방법
특정 시간 후, 한번 실행
ScheduledExecutorService를 이용하여 특정 시간 후에 코드를 실행시킬 수 있습니다.
schedule(Runnable, delay, TimeUnit)은 delay 후에 Runnable의 함수를 호출합니다. TimeUnit은 delay의 시간 단위입니다.
- delay가 5이고 TimeUnit이
TimeUnit.SECONDS이면, delay는 5초가 됩니다.
아래 예제는 5초 후에 함수를 한번 실행시킵니다.
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class Example {
public static void main(String[] args) {
ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
long delay = 5;
// 5초 후 아래 함수 한번 실행
executorService.schedule(new Runnable() {
@Override
public void run() {
System.out.println("Task executed.");
}
}, delay, TimeUnit.SECONDS);
}
}Output:
Task executed.특정 주기로 반복 실행
ScheduledExecutorService 또한 주기적으로 함수를 실행시킬 수 있습니다.
scheduleAtFixedRate(Runnable, delay, period, TimeUnit)은 delay 후에 Runnable의 함수를 호출하며, 그 이후에 period 시간 간격마다 주기적으로 함수를 호출합니다.
- delay가 5이고 TimeUnit이
TimeUnit.SECONDS이면, delay는 5초가 됩니다.
아래 예제는 5초 후에 함수를 처음 실행시키고, 그 이후에 10초 간격마다 반복 호출합니다.
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class Example {
public static void main(String[] args) {
ScheduledExecutorService executorService = Executors.newScheduledThreadPool(1);
long delay = 5;
long period = 10;
// 5초 후 아래 함수 처음 실행, 그 이후 10초 간격으로 반복 실행
executorService.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
// 일정 시간이 지난 후 실행할 코드 작성
System.out.println("Task executed.");
}
}, delay, period, TimeUnit.SECONDS);
}
}Output:
Task executed.
Task executed.
Task executed.
Task executed.
...