Java - 1초마다 반복 실행

1초마다 어떤 작업을 반복 실행하거나, 1초 주기로 특정 작업을 수행하는 방법을 소개합니다.

1. Thread.sleep()을 이용한 방법

반복문 Thread.sleep()을 이용하여 아래 처럼 1초 간격으로 어떤 작업을 반복적으로 수행시킬 수 있습니다. Thread.sleep(ms)은 인자로 전달된 ms 시간만큼 지연시킵니다.

import java.time.LocalDateTime;

public class Example {

    public static void main(String[] args) {

        for (int i = 0; i < 10; i++) {
            System.out.println("Time: " + LocalDateTime.now());

            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

Output:

Time: 2022-12-18T09:40:06.065538646
Time: 2022-12-18T09:40:07.071441476
Time: 2022-12-18T09:40:08.071889670
Time: 2022-12-18T09:40:09.072152351
Time: 2022-12-18T09:40:10.072370184
Time: 2022-12-18T09:40:11.072661888
Time: 2022-12-18T09:40:12.072984717
Time: 2022-12-18T09:40:13.073401625
Time: 2022-12-18T09:40:14.073913821
Time: 2022-12-18T09:40:15.074350100

참고로, Thread.sleep(millisecond) 대신에 TimeUnit.SECONDS.sleep(second)를 사용하여 1초 지연시킬 수 있습니다.

try {
    TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
    e.printStackTrace();
}

2. Timer를 이용한 방법

Timer, TimerTask를 이용하여 주기적으로 어떤 작업을 반복시킬 수 있습니다.

Timer.scheduleAtFixedRate(TimerTask, delay, period)는 period 간격으로 TimerTask.run()을 실행시킵니다. 그리고 가장 처음으로 run()을 실행할 때 delay만큼 지연시킵니다.

반복 작업을 중단하려면 Timer.cancel()으로 타이머를 취소시켜야 합니다.

import java.time.LocalDateTime;
import java.util.Timer;
import java.util.TimerTask;

public class Example {

    public static void main(String[] args) {
        
        TimerTask task = new TimerTask() {
            public void run() {
                System.out.println("Time: " + LocalDateTime.now());
            }
        };
        Timer timer = new Timer("Timer");
        long delay = 0;
        long period = 1000;
        timer.scheduleAtFixedRate(task, delay, period);

        // Wait for a while
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        // Cancel
        timer.cancel();
    }
}

Output:

Time: 2022-12-18T09:43:08.543268498
Time: 2022-12-18T09:43:09.525569639
Time: 2022-12-18T09:43:10.526008232
Time: 2022-12-18T09:43:11.525509583
Time: 2022-12-18T09:43:12.525993832
Time: 2022-12-18T09:43:13.525402474
Loading script...
codechachaCopyright ©2019 codechacha