각 thread에 같은 timeout을 주면 전체 대기가 세 배가 될 수 있어 남은 시간을 다시 계산합니다.
deadline = now + 300ms
join(remaining)
deadline - now
각 remaining으로 join
미완료 목록 처리
핵심: 남은 시간이 0이면 추가 대기 없이 미완료 정책으로 넘어갑니다.