thread pool 예제

실행기 및 실행기Service 인터페이스는 Java에서 다른 스레드 풀 구현에서 작업하는 데 사용됩니다. 일반적으로 스레드 풀의 실제 구현에서 코드를 분리된 상태로 유지하고 응용 프로그램 전체에서 이러한 인터페이스를 사용해야 합니다. 내부적으로 동기 큐 인스턴스가 사용되기 때문에 위의 예제에서 큐 크기는 항상 0이 됩니다. SynchronousQueue에서 삽입 및 제거 작업 쌍은 항상 동시에 발생하므로 큐에 실제로 아무 것도 포함되어 있지 않습니다. 활성 스레드는 시스템 리소스를 소비하므로 JVM이 동시에 너무 많은 스레드를 만들면 시스템의 메모리가 부족해질 수 있습니다. 따라서 생성되는 스레드 수를 제한해야 합니다. 다음은 실행기 API를 사용하여 단일 스레드 풀에서 백업되는 실행기 인스턴스와 작업을 순차적으로 실행하기 위한 무한 큐를 획득하는 방법의 간단한 예입니다. 여기서는 화면에 “Hello World”를 인쇄하는 단일 작업을 실행합니다. 이 작업은 실행 가능한 것으로 유추되는 람다(Java 8 기능)로 제출됩니다. 위의 예제의 작업은 순차적으로 실행되므로 작업 완료 후 플래그 값은 2가 됩니다. 그러나 여전히 코드 위의 완성보다는 Java 실행기 프레임 워크를 배우는 데 중점을 둡니다. 새 스레드 인스턴스생성/재사용과 관련된 중요한 지점에서 포인트 2를 읽습니다. 예를 들어 newFixedThreadPool 메서드는 동일한 코어풀크기 및 최대풀크기 매개 변수 값과 0 keepAliveTime을 가진 ThreadPoolExecutor를 만듭니다.

즉, 이 스레드 풀의 스레드 수는 항상 동일합니다. 제공된 작업은 500밀리초 동안 절전 모드이지만 현재 스레드를 차단하고 실행 호출이 완료된 직후에 결과를 사용할 수 있습니다: 프로그램 실행에서 볼 수 있듯이 작업 4 또는 작업 5는 풀의 스레드가 실행될 때만 실행됩니다. 유휴 상태가 됩니다. 그때까지 추가 작업은 큐에 배치됩니다.