안녕하세요 자바 강좌중인 Falcon입니다.전술한 동기화는 순서에 관계없이 스레드의 동시 접속만을 막는 동기화였다. 그러나 스레드의 실행 순서를 조절하는 것도 동기 범주에 포함된다. 지금부터 그 실행 순서에 관한 소스 코드를 주겠다. 첨부 파일 소스 코드 1.txt 파일 다운로드 내 컴퓨터 저장
네이버 MYBOX에 저장
상기 소스 코드를 보면서 계속 설명한다.위 스레드 클래스는 데이터를 입력하기 위한 스레드입니다.두 번째 클래스는 데이터를 읽기 위한 클래스입니다.하지만 메인 함수를 보면 데이터를 먼저 읽고 데이터를 입력하고 있습니다. 책에서는 실행 결과 값이 null로 나오는데, 실제로 실행해 본 결과 정상적으로 출력되었습니다.여러분은 어떻게 될지 모르겠지만, 현재 제 컴퓨터에서는 정상적으로 출력되고 있습니다. 그리고 아래에 이런 문구가 있습니다. 스레드 실행 순서는 소스 코드가 나열된 순서와 다를 수 있습니다. 즉, 현재 자바에서는 이렇게 되어 있어도 실행 순서를 임의로 바꾸는 것 같습니다. 그러나 이 소스 코드에서는 문제를 일으킬 수 있으므로 다음 형식으로 소스 코드를 작성해야 합니다.먼저 이 부분은 데이터를 읽어드리는 부분입니다. 여기서 wait() 메서드는 Object 클래스 안에 존재하는 메서드인데, wait()가 해주는 역할은 만약 데이터를 입력하지 않은 상태라면 잠에 들라는 뜻입니다. 즉, 데이터를 읽지 않고 그대로 잠이 듭니다. 간단히 말하면 데이터를 읽을 수 없기 때문에 잠시 휴식 시간을 갖는다고 생각하십시오.네 번째 줄에 보면 기본이 false로 되어 있는 게 보여요. 여섯 번째 줄의 메서드를 보면 데이터를 입력하는 메서드인데, 그 안의 내용을 보면 아홉 번째 줄에서 stodayNews를 true로 바꾸게 됩니다. 즉, 데이터를 입력했음을 알리면서 위에서 휴식 중인 스레드를 모두 일으키는 메서드입니다.public final void notify() // 하나의 스레드만 깨우는 public final void notify All() // 모든 스레드를 깨운다.데이터를 입력했기 때문에 이 메서드를 통해 일으키는 것입니다. 이 부분만 알면 이런 상황에서 안정성 높은 코드를 효율적으로 관리할 수 있습니다. 이걸로 [자바 강좌]제92강 접속 순서를 컨트롤하는 동기편을 마칩니다.