Java에서 대기 및 알림이란 무엇입니까?



Java의 Wait 및 Notify는 스레드가 서로 통신 할 수 있도록하는 두 가지 마지막 방법입니다. 이 기사는 세부 사항에 대해 당신을 도울 것입니다

Java의 기능을 사용하면 프로그램의 두 개 이상의 부분을 동시에 실행할 수 있습니다. 각 부분은 스레드입니다. 이러한 스레드는 종종 작업을 조정해야합니다. 이는 Java에서 Wait 및 Notify와 같은 몇 가지 최종 방법을 사용하여 수행됩니다. 이 기사는 이러한 방법을 자세히 이해하는 데 도움이 될 것입니다.

주제에 대해서는 다음 순서로 설명하겠습니다.





의 시작하자!

스레드 동기화 란 무엇입니까?

다중 스레드 프로그램은 정기적으로 여러 사기적이고 놀라운 결과를 초래하는 동일한 리소스에 접근하려고합니다. 때때로 둘 이상의 스레드가 공유 리소스에 액세스하려고 시도 할 수 있으므로 리소스가 한 번에 하나의 스레드에서만 사용되는지 확인해야합니다. 이것은 다음을 사용하여 수행 할 수 있습니다. Java에서의 동기화.



이제 폴링에 대해 이야기합니다. 폴링은 조건이 참이 될 때까지 반복적으로 테스트하는 프로세스입니다. 이 방법은 다음의 도움으로 구현됩니다. 특정 조건이 참인지 아닌지 확인합니다. 스레드에이 방법을 사용할 수 있지만이 방법은 많은 CPU주기를 낭비하고 구현 프로세스를 매우 비효율적으로 만듭니다. 이러한 종류의 버그를 피하기 위해 Java의 Wait 및 Notify와 같은 메서드가 도입되었습니다.

Wait () 및 Notify () 메서드는 무엇입니까?

멀티 스레딩 문제를 해결하기 위해 대기 및 알림과 같은 메서드는 사용됩니다. Object 클래스는 스레드가 리소스의 잠긴 상태에 대해 통신 할 수 있도록하는이 세 가지 마지막 메서드를 사용합니다. 그들은 또한 Guarded Blocks라고도합니다.

자바에서 불변 객체는 무엇입니까

기다림()

이 메소드는 다른 스레드가이 객체에 대해 notify () 및 notifyAll () 메소드를 호출 할 때까지 스레드가 대기하도록합니다. 이 Wait () 메서드는 다른 스레드가 동일한 모니터에 들어가서 notify ()를 호출 할 때까지 호출 스레드에게 잠금을 해제하고 절전 모드로 전환하도록 지시합니다. 이 메서드는 대기하기 전에 잠금을 해제하고 wait () 메서드에서 반환하기 전에 잠금을 다시 획득합니다.



Wait () 메서드는 동기화 잠금과 긴밀하게 통합됩니다. 이는 동기화 메커니즘에서 직접 사용할 수없는 기능을 사용하여 수행됩니다.

통사론:

동기화 (lockObject) {while (! condition) {lockObject.wait ()} // 여기에서 작업 수행}

현재 스레드는 해당 객체의 모니터를 소유해야합니다. 동기화 된 메서드에서만 호출해야합니다. 그렇지 않으면 예외가 발생합니다.

알림 ()

이 방법은 작동해야합니다. 그것은 호출하는 하나의 스레드를 깨 웁니다 기다림() 동일한 개체에 대한 메서드.

전화 알림 () 결국 자물쇠를 포기하지 않습니다. 대기중인 스레드에게 깨울 수 있음을 알려줍니다. 그러나 알림 자의 동기화 된 블록이 완료 될 때까지 잠금은 실제로 포기되지 않습니다. 이제 전화하면 알림 () 리소스에 있지만 알림 기는 여전히 동기화 된 블록 내에서 10 초 동안 작업을 수행해야합니다. 대기 중이던 스레드는 알림이 개체에 대한 잠금을 해제 할 때까지 적어도 추가 10 초 동안 기다려야합니다. ()가 호출되었습니다.

통사론:

동기화 (lockObject) {// establish_the_condition lockObject.notify () // 필요한 경우 추가 코드}

NotifyAll ()

이 메서드는 동일한 객체에서 wait ()를 호출 한 모든 스레드를 깨우는 데 사용됩니다. 우선 순위가 가장 높은 스레드가 보장되지 않더라도 대부분의 상황에서 먼저 실행됩니다. 다른 것들은 notify () 메소드와 동일합니다.

Java에서 Wait () 및 Notify ()를 사용하는 이유와 방법은 무엇입니까?

대기 및 알림을 사용해야합니다. 잠금과 관련이 있고 객체에 잠금이 있기 때문입니다. Java에서 대기 및 알림은 매우 기본적인 개념이지만 객체 클래스 . 놀랍게도 대기 및 알림을 사용하여 코드를 작성하는 것은 쉽지 않습니다. 대기 및 알림을 사용하여 생산자-소비자 문제를 해결하는 코드를 작성하여이를 테스트 할 수 있습니다. 생산자 소비자 예제-Java-Edureka에서 대기 및 알림여기, 나는 공유 두 개의 스레드호출 생산자 소비자 . 생산자 스레드는 번호를 공유 대기열에 넣고 소비자 스레드는 공유 버킷의 숫자를 사용합니다.

조건은 일단 항목이 생성되면 소비 생산자 스레드에 알림이 필요한 후에 소비자 스레드에 알림을 보내야하며 마찬가지로 유사하게해야한다는 것입니다. 이 간 스레드통신Java에서 wait 및 notify를 사용하여 수행됩니다.

노트 : W.ait 및 아니오tify 메서드는 객체 클래스에 정의되어 있습니다., 동기화 된 블록 내에서 호출되어야합니다.

public class Thread1 {public static void main (String [] args) {Thread2 b = new Thread2 () b.start () synchronous (b) {try {System.out.println ( 'Waiting for 2 to complete ...' ) b.wait ()} catch (InterruptedException e) {e.printStackTrace ()} System.out.println ( 'Total is :'+ b.total)}}} class Thread2 extends Thread1 {int total @Override public void run () {동기화 됨 (this) {for (int i = 0 i<=100 i++) { total += i } notify() }}}

위의 예에서 Thread2의 개체, 즉 b가 동기화됩니다. 이 b는 메인 스레드가 전체 값을 출력하기 전에 계산을 완료합니다.

산출:

이것은 우리가 배운이 기사의 끝으로 우리를 가져옵니다 Wait and Notify in Java.위에서 언급 한 내용이 귀하의 지식. 계속 읽고, 계속 탐색하십시오!

또한 확인하십시오 전 세계에 걸쳐 250,000 명 이상의 만족 한 학습자 네트워크를 보유한 신뢰할 수있는 온라인 학습 회사 인 Edureka에서 작성했습니다. Edureka의 Java J2EE 및 SOA 교육 및 인증 과정은 Java 개발자가 되고자하는 학생과 전문가를 위해 설계되었습니다. 이 과정은 Java 프로그래밍을 시작하고 다양한 Java 개념과 함께 핵심 및 고급 Java 개념을 교육하도록 설계되었습니다. Hibernate & Spring처럼.