김영한의 실전 자바 - 고급 1편(생산자 소비자 문제: Object - wait/notify, ReentarantLock - await/signal, BlockingQueue)
·
김영한의 실전 자바 - 고급 1편
생산자 소비자 문제가 있다고 가정하자. 생산자는 p1, p2, p3이 있고 소비자는 c1, c2, c3이 있으며 데이터 버퍼는 2개가 최대다. 생산자 3명이 생산 이후 소비자 3명이 소비를 시도하게 되면 버퍼 용량 부족으로 데이터가 하나 유실 된다. 이를 멀티스레딩 환경에서 해결할 수 있는 방법이 무엇이 있는가. 아래 그림을 활용해 설명하시오.멀티 스레딩 환경이므로 put과 take 함수는 synchronized로 lock을 통해서만 접근 가능하도록 설정해야 한다.버퍼가 다 찼을 때 데이터 유실을 방지하고자 버퍼가 다 찬 경우 put 함수에서 while문과 sleep을 활용해 버퍼가 빌 때 까지 대기하는 방법은 lock을 계속 잡고 있어 다른 스레드가 take를 할 수 없는 상황이 벌어진다.따라서, pu..