BlockingQueue printer는 대기·취소·결과 정책을 함께 둔다

take는 빈 Queue에서 CPU를 쓰지 않고 기다리며 interrupt가 종료 신호를 깨웁니다.

Printer workerQueue 소비 loop

BlockingQueue

put·take 대기

running

새 작업 수용 정책

interrupt

take 깨우기

drain

남은 작업 처리

Outcome

완료·취소·실패

핵심: 정상 종료와 오류 중단을 구분하고 남은 작업을 비울지 버릴지 명시합니다.