스레드 커뮤니케이션의 목적은 스레드가 서로 신호를 보내도록하는 것입니다. 또한 스레드 통신으로 인해 스레드가 다른 스레드의 신호를 기다릴 수 있습니다. 예를 들어, 스레드 B는 스레드 A의 신호를 기다릴 수 있으며, 이는 스레드 A가 처리 및 완료된 신호 일 수 있습니다.
대기 () 메소드
- 방법의 실행을 방해하고,이 스레드를 기다리고, 일시적으로 CPU를 사용할 권리를 포기하고, 다른 스레드 가이 동기화 방법을 사용하도록 허용하십시오.
notify () 메소드
-이 동기 파티의 사용으로 인해 대기 실의 특정 끝에서 기다리고 있습니다.
notifyall () 메소드
이 동기화 방법의 사용으로 인해 대기 종료를 기다리는 모든 스레드를 깨우십시오.
대기 방법을 사용하는시기
이 스레드의 요구를 충족시키기 위해 다른 스레드 에서이 변수를 수정 해야하는 경우 변수가 다른 스레드에 의해 수정되어야하는 경우 동기화 방법에서 Wait () 메소드를 사용할 수 있습니다.
여기서 나는 대기의 역할을 간단히 설명하고 알림을 간략하게 설명하기 위해 수업에서 예를 들어 보겠습니다.
우리는 이미 티켓 판매와 같은 멀티 스레딩에서 각 창에서 판매되는 티켓 순서가 무작위라는 것을 알고 있습니다. 2 개의 티켓 판매 창이있는 경우 100 개의 티켓을 차례로 판매해야합니다. Window A에서 하나의 티켓을 판매 한 후 다음 티켓은 Window B에서 판매해야합니다.이 기능을 구현하려면 어떻게해야합니까?
우선, 진술을 설정할 수 있다고 생각합니다. 경우 (i%2 == 0)이면 스레드 1 실행, 그렇지 않으면 스레드 2가 실행되지만 스레드 1과 스레드 2의 실행은 무작위이므로 i 크기에 따라 누가 실행되는지를 결정하도록 지정할 수 없습니다.
그런 다음 스레드에서 Wait () 및 notify ()를 사용할 수 있습니다.
스레드 1이 완료되면 잠시 기다린 다음 스레드 2가 실행되고 스레드 2가 완료된 후 스레드 1을 깨우고 다시 깨우십시오.
스레드 1이 완료되면 잠시 기다린 다음 스레드 2가 실행되고 스레드 2가 완료되면 스레드 1을 깨우십시오.
이런 식으로 스레드 1과 스레드 2는 차례로 실행할 수 있습니다.
우리는 프로그램을 작성하기위한 예제로 10 개의 숫자를 인쇄했으며 총 2 개의 클래스 MyPrint 및 MyPrinttest를 구축했습니다.
myprint.java
공개 클래스 MyPrint 구현 실행 가능 {private int i = 0; @Override public void run () {try {print ();} catch (InterpruptedException e) {// todo 자동 생성 캐치 블록 E.PrintStackTrace ()} public synchronized void print () Drows InterpruptedException {while (i <10) {System.out.println (thread.currentThread (). getName ()+":"+i); i ++; notife (); try {wait ();} catch (e.printstacktrace ();}}}}}}결과는 그림에 나와 있습니다
스레드 1과 스레드 2가 서로 교대로 인쇄하도록 구현 된 것을 볼 수 있습니다.
달리기 프로세스 만 이해하십시오
while (i <10) {system.out.println (thread.currentthread (). getName ()+":"+i); i ++; notify (); try {wait ();} catch (InterpruptedException e) {e.printstackTrace ();}}}}}i <10이면 스레드 1을 인쇄 한 다음 깨우기를 수행하십시오. 앞에 스레드가 없으므로이 단계는 실행되지 않습니다. 그런 다음 스레드 1이 기다립니다. 스레드 2를 실행 한 후 이전 스레드 (예 : 스레드 1)를 깨우고 스레드 1을 인쇄합니다.
이 프로세스는 루프가 분해 될 때까지 계속되므로 회전을 수행 할 수 있습니다.
요약
위는이 기사의 전체 내용입니다. 대기의 역할을 간략하게 논의하고 스레드 커뮤니케이션에서 통지합니다. 모든 사람에게 도움이되기를 바랍니다. 관심있는 친구는이 사이트의 다른 관련 주제를 계속 참조 할 수 있습니다. 단점이 있으면 메시지를 남겨 두십시오. 이 사이트를 지원해 주신 친구들에게 감사드립니다!