웹사이트 검색

Java의 Thread.sleep() - Java 스레드 수면


소개

Java Thread.sleep() 메서드를 사용하여 지정된 시간(밀리초) 동안 현재 스레드의 실행을 일시 중지할 수 있습니다. 밀리초에 대한 인수 값은 음수가 될 수 없습니다. 그렇지 않으면 IllegalArgumentException이 발생합니다.

sleep(long millis, int nanos)는 지정된 밀리초 및 나노초 동안 현재 스레드의 실행을 일시 중지하는 데 사용할 수 있는 또 다른 방법입니다. 허용되는 나노초 값은 0에서 999999 사이입니다.

이 기사에서는 Java의 Thread.sleep()에 대해 알아봅니다.

Thread.sleep 작동 방식

Thread.sleep()은 스레드 스케줄러와 상호 작용하여 현재 스레드를 지정된 시간 동안 대기 상태로 둡니다. 대기 시간이 끝나면 스레드 상태는 실행 가능한 상태로 변경되고 CPU가 추가 실행을 기다립니다. 현재 스레드가 잠자고 있는 실제 시간은 운영 체제의 일부인 스레드 스케줄러에 따라 다릅니다.

Java Thread.sleep 중요 사항

  1. 항상 현재 스레드 실행을 일시 중지합니다.
  2. 스레드가 깨어나서 실행을 시작하기 전에 잠자고 있는 실제 시간은 시스템 타이머와 스케줄러에 따라 다릅니다. 조용한 시스템의 경우 실제 절전 시간은 지정된 절전 시간에 가깝지만 사용량이 많은 시스템의 경우 조금 더 깁니다.
  3. Thread.sleep()은 모니터를 잃지 않거나 획득한 현재 스레드를 잠그지 않습니다.
  4. 다른 스레드는 현재 스레드를 중단할 수 있으며 이러한 경우 InterruptedException이 발생합니다.

Java Thread.sleep 예제

다음은 Thread.sleep()이 2초(2000밀리초) 동안 기본 스레드 실행을 일시 중지하는 데 사용되는 예제 프로그램입니다.

package com.journaldev.threads;

public class ThreadSleep {

    public static void main(String[] args) throws InterruptedException {
        long start = System.currentTimeMillis();

        Thread.sleep(2000);

        System.out.println("Sleep time in ms = " + (System.currentTimeMillis() - start));
    }
}

첫째, 이 코드는 현재 시스템 시간을 밀리초 단위로 저장합니다. 그런 다음 2000밀리초 동안 휴면합니다. 마지막으로 이 코드는 새로운 현재 시스템 시간에서 이전 현재 시스템 시간을 뺀 값을 출력합니다.

Output
Sleep time in ms = 2005

이 차이는 정확히 2000밀리초가 아닙니다. 이는 Thread.sleep() 작동 방식과 스레드 스케줄러의 운영 체제별 구현 때문입니다.

결론

이 기사에서는 Java의 Thread.sleep()에 대해 배웠습니다.

더 많은 Java 자습서로 학습을 계속하십시오.