thread sleep thread sleep method java with examples
이 튜토리얼에서는 Java의 Thread Sleep () 메서드에 대해 설명합니다. 예제의 도움으로 Thread.Sleep () 메서드가 어떻게 작동하는지 살펴 보겠습니다.
그만큼 java.lang.Thread.sleep (long millis) method는 현재 실행중인 스레드를 절전 모드로 전환하는 Thread 클래스에서 제공하는 메서드입니다. sleep 메소드의 인수로 수면 시간을 지정합니다.
=> 여기에서 Java Beginners Guide를 살펴보십시오.
학습 내용 :
Java의 Thread Sleep () 메서드
Java의 Thread 클래스는 sleep 메소드의 두 가지 변형을 제공합니다.
sleep () 메서드의 두 변형의 프로토 타입은 아래에 설명되어 있습니다.
# 1) 수면 방법 변형 # 1
원기: public static void sleep (long millis) throws InterruptedException
매개 변수 : millis => 스레드가 휴면하는 시간 (밀리 초).
반환 값 : 빈
던졌습니다 :
- IllegalArgumentException => millis가 음수 인 경우
- InterruptedException => 다른 스레드가 현재 스레드를 중단하는 경우. 이 예외가 발생하면 스레드의 인터럽트 된 상태가 지워집니다.
기술: 이러한 수면 방법의 변형은 현재 스레드를 수면 상태로 만들거나 주어진 밀리 초 (메서드 인수에 제공됨) 동안 실행을 일시적으로 중지합니다. 그러나 잠자기 동안 스레드는 모니터를 잃거나 소유권을 잠그지 않습니다.
# 2) 수면 방법 변형 # 2
원기: public static void sleep (long millis, int nanos) throws InterruptdException
매개 변수 :
SQL에서 왼쪽 조인과 왼쪽 외부 조인의 차이점
- 밀리 => 스레드가 휴면해야하는 기간 (밀리 초)입니다.
- 나노 => 스레드가 휴면 할 수있는 추가 나노초. 범위는 0 – 999999입니다.
반환 값 : 빈
던졌습니다 :
- IllegalArgumentException => millis 값이 음수이면 nanos 값이 범위를 벗어납니다.
- InterruptedException => 다른 스레드가 현재 스레드를 중단하는 경우 이 예외가 발생하면 스레드의 인터럽트 된 상태가 지워집니다.
기술: 이 sleep 메소드의 변형은 스레드가이를 호출하여 주어진 밀리 초 동안 잠자기 상태로 만들거나 일시적으로 실행을 중지하도록합니다. (메서드 호출의 첫 번째 인수). 또한 수면을위한 나노초 (메서드 호출의 두 번째 인수) 수를 제공했습니다.
지정된 시간의 정확성과 정밀도는 시스템 타이머 및 스케줄러에 따라 다릅니다. 스레드가 휴면 상태 일 때 잠금 또는 모니터의 소유권은 변경되지 않습니다.
Thread.Sleep 메서드 작업
스레드가 휴면 또는 일시 중단 될 때마다 스케줄러에 의해 수행됩니다. Thread.sleep () 메소드는 스레드 스케줄러와 통신하므로 스케줄러는 현재 실행중인 스레드가 지정된 기간 동안 상태를 기다리도록 변경되도록 할 수 있습니다.
이 지정된 시간이 끝나면 스레드의 상태가 '실행 가능'으로 변경되어 CPU가 실행을 계속할 때까지 기다릴 수 있습니다.
따라서 스레드가 대기하는 기간은 메서드가 아니라 스케줄러에 따라 다릅니다. 스케줄러가 운영 체제의 일부이므로 OS 아키텍처는 스레드의 상태 변경에도 역할을합니다.
Thread.sleep () 메서드를 자세히 보았으므로이 메서드를 사용하는 동안 몇 가지 사항을 염두에 두어야합니다.
포인터에는 다음이 포함됩니다.
#1) Thread.sleep () 메서드는 항상 현재 스레드의 실행을 일시 중지합니다.
#두) 스레드가 대기하는 실제 기간은 스케줄러와 시스템 타이머에 따라 다릅니다.
예를 들면 사용량이 매우 많은 시스템의 경우 스레드의 휴면 시간이 지정된 시간보다 길 수있는 반면, 사용량이 많지 않은 시스템의 경우 지정된 시간에 다소 가까울 수 있습니다.
C ++이란 무엇입니까?
#삼) 스레드가 잠자기 동안에는 잠자기 전에 획득 한 잠금이나 모니터가 손실되지 않습니다.
# 4) 휴면 상태에있는 현재 스레드는 다른 스레드에 의해 중단 될 수 있습니다. 이 경우 'InterruptedException'이 발생합니다.
Java의 Thread.sleep 예제
이제 수면 방법을 보여주는 예를 살펴 보겠습니다. 여기에 run () 메서드가있는 스레드 클래스가 있습니다. run () 메서드에서는 'Thread.sleep (1000)'이라고합니다. 그런 다음 주 함수에서이 스레드의 두 인스턴스, 즉 두 개의 스레드를 만듭니다. 그런 다음 스레드를 시작합니다.
출력에서 두 스레드가 모두 실행 중일 때 스레드가 차례로 예약됩니다.
예:
class SleepThread extends Thread { //run method for thread public void run() { for(int i=1;i<5;i++) { try { //call sleep method of thread Thread.sleep(1000); }catch(InterruptedException e){System.out.println(e);} //print current thread instance with loop variable System.out.println(Thread.currentThread().getName() + ' : ' + i); } } } class Main{ public static void main(String args()) { //create two thread instances SleepThread thread_1 = new SleepThread(); SleepThread thread_2 = new SleepThread(); //start threads one by one thread_1.start(); thread_2.start(); } }
산출:
출력을 관찰하면 Thread_0과 Thread_1이 차례로 실행되는 것을 알 수 있습니다.
수면 시간 값이 음수 인 Thread.sleep ()
다음으로 Thread.sleep () 메서드의 또 다른 예를 보여 드리겠습니다. 여기서 우리는 부정적인 수면 시간 값의 특별한 경우를 고려했습니다. 프로그램은 위의 프로그램과 비슷하지만 제공되는 수면 시간은 -500입니다.
예:
class SleepThread extends Thread { public void run() { for(int i=1;i<5;i++) { try { //call sleep method with negative value of time Thread.sleep(-500); }catch(InterruptedException e){System.out.println(e);} System.out.println(i); } } } class Main{ public static void main(String args()) { //create two thread instances SleepThread t1=new SleepThread(); SleepThread t2=new SleepThread(); //start the threads one by one t1.start(); t2.start(); } }
산출:
출력을 보면 잠자기 시간의 음수 값이 허용되지 않기 때문에 메서드가 'IllegalArgumentException'을 throw했음을 알 수 있습니다.
자주 묻는 질문
Q # 1) Java에서 스레드 절전은 어떻게 작동합니까?
bpo에 대한 기술 지원 인터뷰 질문 및 답변
대답: 지정된 시간 (밀리 초)으로 스레드에서 sleep ()이 호출되면 스레드가 실행을 중지합니다. CPU를 포기합니다. 따라서 스레드가 절전 상태 인 기간 동안 다른 스레드가 CPU를 사용할 수 있습니다.
Q # 2) 스레드 Java에서 yield () 및 sleep ()은 무엇입니까?
대답: 스레드의 sleep () 메소드는 스레드가 CPU를 포기하고 실행을 중지하도록합니다. 이 스레드가 휴면하는 동안 다른 스레드는 CPU를 획득합니다. 이것은 스케줄러에 의해 수행됩니다.
yield () 메서드는 또한 호출 될 때 스레드가 CPU 제어를 포기하도록하지만 sleep () 메서드는 yield ()와 비교할 때 더 결정된 동작을 나타냅니다.
Q # 3) Java 스레드가 절전 모드로 전환되는 것을 어떻게 중지합니까?
대답: interrupt () 메서드를 사용하여 Java 스레드가 잠자기에서 중지합니다. 대기 중이거나 휴면중인 모든 스레드는 Thread 클래스의 interrupt () 메서드를 호출하여 중단 될 수 있습니다.
Q # 4) Java에서 스레드를 죽일 수 있습니까?
대답: 아니요, 스레드는 Java에서 종료되지 않습니다. 대신 스레드는 Java에서 중지됩니다. 스레드가 종료 된 다음 정상적으로 종료 될 수 있습니다. 우리는 종종 스레드를 종료 할 수 있도록 값의 변경 사항을 주기적으로 확인하는 휘발성 부울 필드를 사용합니다.
Q # 5) sleep ()이 정적 메서드 인 이유는 무엇입니까?
대답: sleep () 메서드를 호출하여 스레드를 절전 모드로 전환 할 때 항상 Thread 클래스를 사용하여 호출합니다.
예를 들면 , Thread.sleep (1000);
위의 호출은 현재 스레드 컨텍스트에서 작동하며 현재 스레드를 절전 모드로 전환합니다. 특정 스레드 인스턴스를 사용하여 메서드를 호출하지 않습니다. 따라서 방법은 정적입니다.
결론
이 튜토리얼에서는 자바 스레드의 sleep () 메소드에 대해 설명했습니다. Sleep () 메서드는 실행중인 현재 스레드가 sleep 메서드에 대한 인수로 제공되는 지정된 시간 동안 실행을 중지하도록합니다.
시스템 스케줄러는 sleep 메서드와 함께 작동하여 현재 스레드를 대기 상태로 만듭니다. 스레드가 잠자고있는 동안 획득 한 잠금 또는 모니터를 계속 소유합니다. sleep 메서드에 수면 시간의 음수 값을 전달하면 'IllegalArgumentException'이 발생합니다.
sleep () 메소드에 유효한 수면 시간 값을 전달하면 현재 스레드가 대기하는 동안 다른 스레드가 차례대로 실행됩니다.
=> 여기에서 Java 교육 자습서의 A-Z를 보려면 여기를 확인하십시오.