ExecutorService 는 Executors 는 ExecutorService 객체를 생성하며, 스레드의 갯수를 지정해서 작업 단위를 처리 할 수 있다.
공유 무제한 대기열에서 작동하는 고정된 수의 스레드를 재사용하는 스레드 풀을 만듭니다. 어느 시점에서든, 대부분의 n Threads 스레드는 적극적인 처리 작업이 될 것이다.
모든 스레드가 활성화되어 있을 때 추가 작업이 제출되면, 스레드를 사용할 수 있을 때까지 대기열에서 기다릴 것입니다.
종료 전 실행 중 실패로 인해 스레드가 종료되면, 후속 작업을 실행하기 위해 필요한 경우 새 스레드가 종료됩니다. 풀의 스레드는 명시적으로 종료될 때까지 존재할 것이다.
무제한 대기열에서 작동하는 단일 작업자 스레드를 사용하는 실행기를 만듭니다. (그러나 종료 전 실행 중 실패로 인해 이 단일 스레드가 종료되면, 후속 작업을 실행하는 데 필요한 경우 새 스레드가 그 자리를 차지할 것입니다.)
작업은 순차적으로 실행되도록 보장되며, 주어진 시간에 하나 이상의 작업이 활성화되지 않습니다. 그렇지 않으면 동등한 newFixedThreadPool(1)과 달리 반환된 실행기는 추가 스레드를 사용하도록 재구성할 수 없음을 보장합니다.
필요에 따라 새 스레드를 만드는 스레드 풀을 만들지만, 사용 가능할 때 이전에 생성된 스레드를 재사용합니다.
이러한 풀은 일반적으로 수명이 짧은 많은 비동기 작업을 실행하는 프로그램의 성능을 향상시킬 것이다. 실행을 위한 호출은 가능한 경우 이전에 생성된 스레드를 재사용할 것이다.
기존 스레드를 사용할 수 없는 경우, 새 스레드가 생성되어 풀에 추가됩니다. 60초 동안 사용되지 않은 스레드는 종료되고 캐시에서 제거됩니다.
따라서, 충분히 오랫동안 유휴 상태인 풀은 어떤 자원도 소비하지 않을 것이다. 속성은 비슷하지만 세부 사항이 다른 풀(예: 시간 초과 매개 변수)은 ThreadPoolExecutor 생성자를 사용하여 만들 수 있습니다.
주어진 지연 후에 실행하거나 주기적으로 실행할 명령을 예약할 수 있는 스레드 풀을 만듭니다.
이전에 제출된 작업이 실행되는 질서 정연한 종료를 시작하지만, 새로운 작업은 허용되지 않습니다. (RejectedExecutionException이 발생이 된다.)
작업 테스크를 할당해준다.
ExecutorService 를 선언을 해준다. newFixedThreadPool
스레드를 9개로 고정해서 생성을 시킨다.
execute
메소드를 이용해서 하나의 작업을 만들어준다. 0~9 개의 테스크를 만들어 주려고 한다.
테스크를 실행을 시켰다면 shoutdown
메소드를 선언을 해주어 더이상 service 에 할당이 되지 않도록 해준다.
shoutdown을 선언을 한 이후 다시 테스크를 할당을 해주면 RejectedExecutionException
unckecked 예외가 발생이 된다.
9개의 스레드를 만든다라고 인스턴스 선언을 해주었기 때문에 9개의 스레드가 발생이 된다.
역으로 3가지 인스턴스에 9개의 작업을 할당을 해주로고 한다면
3가지만 스레드를 생성이 되기 때문에 나머지 6개의 작업은 대기열을 가지게 된다. 이후 3가지가 처리를 한뒤 3가지가 작업을 진행을 하게 되고 나머지 3개는 대기열 상태에 들어가게 된다.