CodeGym/Java Blog/무작위의/Java의 Thread.sleep() 메소드
John Squirrels
레벨 41
San Francisco

Java의 Thread.sleep() 메소드

무작위의 그룹에 게시되었습니다
회원
Java 프로그램에는 스레드가 너무 빨리 실행되거나 프로그램이 다른 스레드로 전환해야 하는 상황이 있습니다. 이렇게 하려면 현재 스레드의 실행을 일시 중단해야 합니다. Java에서는 java.lang.Thread.sleep() 메서드를 사용하여 이 작업을 수행할 수 있습니다.

Thread.sleep() 메서드

Thread 클래스는 Java.lang 패키지에 있으며 Thread.sleep() 메서드 포함합니다 . Java.lang.thread sleep() 메서드는 지정된 시간(밀리초) 동안 현재 스레드를 일시 중단하는 데 사용됩니다. Oracle 문서를 보면 Thread 클래스 의 두 가지 오버로드된 sleep() 메서드 가 있음을 알 수 있습니다 .
static void sleep(long millis)
여기서 millis는 밀리초 단위의 시간입니다. 이 방법은 현재 실행 중인 스레드를 시스템 타이머 및 스케줄러의 정밀도에 따라 밀리초 동안 잠자기(일시적으로 실행 중지, "수면") 상태로 만듭니다. 밀리초에 대한 인수 값은 음수가 될 수 없습니다. 그렇다면 IllegalArgumentException 이 발생합니다.
static void sleep(long millis, int nanos)
여기서 mills는 밀리초 단위의 시간이고 nanos는 나노초 단위의 시간입니다. 이 방법의 변형은 정확한 시간(밀리초 및 나노초) 동안 현재 스레드의 실행을 일시 중단하는 데 사용됩니다. 나노초 값은 0에서 999999 사이에서 유효합니다 . Thread.sleep() 메서드를 사용하여 5초 동안 기본 스레드의 실행을 일시 중지하는 간단한 프로그램을 만들어 보겠습니다 .
public class SleepDemo {

       public static void main(String[] args) throws InterruptedException {
           //the current time in milliseconds
           long start = System.currentTimeMillis();
           // stop the main thread of the program for 5000 milliseconds (5 seconds)
           Thread.sleep(5000);
           System.out.println("The thread is paused for " + (System.currentTimeMillis() - start) + " milliseconds");
       }
}
이 프로그램에서 무슨 일이 일어나고 있나요? 먼저 시작된 다음 5밀리초(5초) 동안 휴면 상태가 된 다음 콘솔에 얼마나 오랫동안 정지되었는지에 대한 메시지를 인쇄한 다음 종료됩니다. 출력은 다음과 같습니다.
스레드가 5008밀리초 동안 일시 중지됩니다.
보시다시피 프로그램은 5초 동안 멈추지 않고 조금 더 길게 멈춥니다. 또한 컴퓨터에서 프로그램을 실행하면 5000밀리초 이상 동안 스레드 실행을 중지할 수 있으며 5008밀리초 동안은 필요하지 않음을 알 수 있습니다. 요점은 모든 것이 운영 체제와 스레드 스케줄러의 특정 구현에 따라 다르다는 것입니다. 조금 더 자세히 설명하면 스레드가 깨어나서 실행을 시작하기 전에 대기하는 실제 시간은 시스템 타이머와 스케줄러에 따라 다릅니다. 조용한 시스템의 경우 실제 절전 시간은 지정된 절전 시간에 가깝지만 로드된 시스템의 경우 약간 더 깁니다. 이 방법은 어떤 작업을 항상 수행해야 하지만 너무 자주는 아닌 경우 자식 스레드에서 자주 사용됩니다. 다음은 매초 메시지를 출력하고 절대 종료하지 않는 프로그램의 예입니다.
public class SleepDemo1 {

   public static void main(String[] args) throws InterruptedException {
       while (true)
       {
           Thread.sleep(1000);
           System.out.println("One more second");
       }
   }
}

Java Thread Sleep의 중요 사항

Java Thread Sleep 메서드는 다음과 같은 방식으로 작동한다는 점을 기억하는 것이 중요합니다 .
  • 항상 현재 스레드의 실행을 일시 중단합니다.

  • 실제 스레드는 깨어날 때까지 잠들고 실행 시간은 시스템 타이머와 스케줄러에 따라 다릅니다.

  • 휴면 스레드는 현재 스레드를 차단하지 않습니다.

  • 다른 스레드는 현재 휴면 중인 스레드를 중단할 수 있으며 이 경우 InterruptedException이 발생합니다.

  • 밀리초에 대한 인수 값은 음수가 될 수 없습니다. 그렇지 않으면 IllegalArgumentException이 발생합니다.

IllegalArgumentException 을 던지는 예제를 제공하려면 위의 프로그램을 약간 수정하십시오.
public class SleepDemo1 {

       public static void main(String[] args) throws InterruptedException {
           //the current time in milliseconds
           long start = System.currentTimeMillis();
           // stop the main thread of the program for 5000 milliseconds (5 seconds)
           Thread.sleep(-5000);
           System.out.println("The thread is paused for " + (System.currentTimeMillis() - start) + " ms");
       }
}
결과는 다음과 같습니다.
스레드 "main" java.lang.IllegalArgumentException의 예외: SleepDemo.main(SleepDemo.java:7)의 java.base/java.lang.Thread.sleep(네이티브 메서드)에서 시간 초과 값이 음수입니다.
위에서 메인 스레드를 잠들게 했습니다. 이제 메서드를 다른 스레드에 적용해 보겠습니다.
// Java Program to sleep the custom thread
public class SleepDemo2 extends Thread{

       public void run()
       {
           // thread 0
           try {
               for (int i = 0; i < 10; i++) {

                   // sleeps the main thread for about 2 seconds
                   Thread.sleep(2000);
                   System.out.println(i);
               }
           }
           catch (Exception e) {

               // catching the exception
               System.out.println(e);
           }
       }
       public static void main(String[] args)
       {
           SleepDemo2 sleepDemo2 = new SleepDemo2();
           sleepDemo2.start();
       }
}
출력은 다음과 같습니다.
0 1 2 3 4 5 6 7 8 9
코멘트
  • 인기
  • 신규
  • 이전
코멘트를 남기려면 로그인 해야 합니다
이 페이지에는 아직 코멘트가 없습니다