8.1 작업과 실행 정책 간의 보이지 않는 연결 관계

Executor 프레임워크는 작업의 정의 부분과 실행 부분을 서로 분리시켜 준다. 실행 정책을 정하거나 변경하는데 있어 어느 정도 유연성을 갖고 있긴 하지만, 특정 형태의 실행 정책에서는 실행할 수 없는 작업이 있기도 하다.

스레드 풀은 동일하고 서로 독립적인 다수의 작업을 실행할 때 가장 효과적이다. 일반적인 네트워크 기반의 서버 애플리케이션은 이 조건을 대부분 만족한다.

8.1.1 스레드 부족 데드락 (thread starvation deadlock)

  1. 특정 자원을 확보하고자 계속 대기하거나 2. 풀 내부의 다른 작업이 실행되고난 뒤 알 수 있는 조건이 만족하기를 기다리는 것처럼 끝없이 계속 대기할 가능성이 있는 기능을 사용하는 작업이 풀에 등록된 경우엔 언제든지 발생할 수 있다.

8.1.2 오래 실행되는 작업

데드락이 발생하지 않더라도 특정 작업이 예상보다 긴 시간동안 종료되지 않고 실행된다면 스레드 풀의 응답 속도에 문제점이 생긴다.

제한 없이 계속해서 대기하는 기능 대신 일정 시간 동안 만 대기하는 메서드를 사용할 수 있다면, 오래 실행되는 작업이 주는 악영향을 줄일 수 있다. 대부분의 블로킹 메서드는 시간이 제한되지 않은 것과 시간이 제한된 것이 함께 만들어져 있다.