제가 이해한것을 바탕으로 질문드리겠습니다.

해당 코드에서 처음에 main스레드가 시작되면서 스레드가 0개이고 최대 5개인 스레드풀이 생성됩니다. 그 후 for문의 i=1이 시작되면서 첫번째 작업(Callable<Integer>구현객체)이 생성되고 작업큐에 들어갑니다.

여기서 thread-1이 생성되고 첫번째 작업을 실행합니다.

main스레드의 future.get()때문에 thread-1이 작업을 완료할 때까지 main스레드가 블록되기때문에 다음 for문의 i=2로 넘어가지를 못하고 thread-1의 첫번째 작업이 완료된 후 그 결과를 출력 한다음 다음 for문으로 넘어가는 방식.

그렇다면 여기서 사실상 스레드풀의 스레드가 최대 5개이지만 future.get()때문에 main스레드가 블록되서 다음 작업을 생성하고 작업큐에 넣지 못하기때문에 스레드드풀의 스레드가 더이상 생성되지 않고 스레드들이 작업들을 병렬적으로 처리할 수 없다. 즉 스레드 하나가 모든 작업을 다 순차적으로 처리한다.


저는 이렇게 이해했습니다. 그런데 막상 실행해보니까



이렇게 thread-1, thread-2, thread-3, thread-4, thread-5가 생성된 것을 알 수 있습니다. 분명 제일 처음에 thread-1이 생성되고 thread-1이 첫작업을 완료할 때까지 작업큐에 다른 작업이 들어올 수 없고 그렇다면 thread-2가 생성될 일이 없는 것 아닌가요?

챗지피티에 물어보니까 자꾸 작업을 병렬적으로 처리할 수 없다, 있다, 없다, 있다 무한반복해서 모니터 부술뻔했습니다.
왜 스레드가 5개나 생성된건가요??

장문의 질문 읽어주셔서 감사합니다.