자바의 synchronized 키워드는 멀티 스레드 환경에서 동시 접근에 대한 간단하고 깔끔한 해결책을 제시해준다. 단, 객체 기반 락킹이라는 점만 빼면 말이다. 이 문제 때문에 자바5 이상부터 더 나은 동시성 컨트롤 방법을 담은 유틸리티 클래스들이 나타나게 되었다. 다음 코드를 실행시키면 어떤 일이 벌어지는지 충분히 이해가 갈 것이다.
publicclassConcurrentClass{ synchronizedpublicvoidsomeMethod1()throws InterruptedException { System.out.println("I am go to sleep"); Thread.sleep(5000); System.out.println("I woke up!"); }
synchronizedpublicvoidsomeMethod2()throws InterruptedException { System.out.println("I am go to sleep"); Thread.sleep(5000); System.out.println("I woke up!"); } }