[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.
...