지난번 예제를 돌려보셨다면 위와 같은 화면을 얻을 수 있을겁니다. 틀림없이 Bobby는 Brazil로 연결이 되고, Alice는 Alaska로 연결이 되어야 하는데, 그렇지 않은 경우가 종종 등장하고, check 함수에 걸릴 이유가 없는데도 불구하고 걸리는 경우도 종종 보입니다.

이유는 이러합니다. 첫번째에 들어가는 값의 스레드, 두번째에 들어가는 값의 스레드, check 함수 등 전부 따로 놀았기 때문입니다. 여기서 시사하는 점은 스레드 세이프한지 여부를 확인하기 위한 함수 역시 스레드 세이프하지 않다면 별 의미가 없다는 사실입니다.

그러면 기존의 소스를 스레드 세이프한 소스로 변경된 소스를 보도록 하겠습니다.









그저 Synchronized가 추가되었을 뿐입니다. 해당되는 내용은 운영체제의 CPU 스케쥴링의 내용을 하면서 같이 했던 기억이 있군요. 검색을 통해 찾아보시길 바랍니다. (사실 동기화에 대한 내용만 주구장창 하더라도 몇개의 글이 나올 수 있습니다. 다만 저의 봉사 정신이 그 정도까지는 투철하지 못할 따름이지요. -_-)


따라서 결과 출력은 위와 같은 화면이 나오고 끝입니다. (check 함수는 에러가 발생한 경우에만 출력을 하기 때문에 위의 화면이 끝입니다.)

지금까지의 소스와 내용은 아래의 도서를 참고하였습니다.
Java 언어로 배우는 디자인 패턴 입문 - 멀티 쓰레드 편
국내도서>컴퓨터/인터넷
저자 : 유키 히로시(Yuki Hiroshi) / 변연희역
출판 : 영진닷컴 2008.04.30
상세보기


또한 질문이 있으신 경우 댓글 혹은 방명록에 남겨주시기 바랍니다.
저작자 표시 비영리 변경 금지
신고

'Trash Can' 카테고리의 다른 글

Primary Index - Dense, Sparse  (0) 2011.12.21
Indexing - B+ tree  (2) 2011.12.16
[Java] Single Threaded Execution 예제  (2) 2011.11.10
Thread safe 하지 않은 예제 - Java  (2) 2011.10.27
Thread [Java]  (0) 2011.10.26
Intermediate SQL - cont. 뷰  (0) 2011.10.01
by 가우초 2011.11.10 23:45
| 1 |