commons pool 예제
이제 스레드 풀을 구현하는 방법에 대한 요구 사항과 대략적인 아이디어가 있으므로 실제 코딩을 수행할 차례입니다. 이 게시물에서는 아파치 공용 풀을 사용하여 자체 개체 풀을 만듭니다. 이 게시물을 작성할 때 버전 2.2는 최신, 그래서 우리는이것을 사용 하자. 또한 프레임워크는 풀을 관리, 모니터링 및 확장하기 위한 수명 주기 메서드와 도우미 메서드를 제공하는 인터페이스 집합을 제공합니다. 경제적 측면에서 볼 때, 경제선이 소비와 비배제 모두에서 경쟁할 때 커먼스의 비극이 발생할 수 있습니다. 이러한 유형의 상품은 일반 풀 자원 상품(개인 물품, 클럽 상품 또는 공공 재화와는 대조적)이라고 합니다. 작업 스케줄러에 대한 스레드 풀 구성 요소를 디자인하고 구현하여 지정된 일정에 따라 작업을 트리거하고 완료 및 실행 결과를 보고하도록 요청받았다고 가정합니다. 이러한 시나리오에서 스레드 풀의 목적은 필수 스레드 수를 풀화하고 독립 스레드에서 예약된 작업을 실행하는 것입니다. 요구 사항은 다음과 같이 요약됩니다: 세 번째 요구 사항은 두 번째 요구 사항과 다소 관련이 있습니다. 작업의 완료를 보고하는 것은 클라이언트가 실행 결과를 얻기 위해 기다리고 있음을 의미할 수도 있습니다. 이 기능을 처리하기 위해 일종의 콜백 메커니즘을 제공할 수 있습니다.
가장 간단한 콜백 메커니즘은 java.lang.Object의 wait() 및 notify() 의미 체계를 사용하여 구현할 수 있습니다. 또는 관찰자 패턴을 사용할 수 있지만 지금은 간단하게 살펴보겠습니다. java.lang.Thread 클래스의 join() 메서드를 사용 하려는 유혹 수 있습니다 하지만 풀된 스레드run() 메서드를 완료 하지 않습니다 하 고 풀에 필요한 만큼 실행 유지 하기 때문에 작동 하지 않습니다. 최대 성능과 처리량을 달성하기 위해 위의 매개 변수에 대해 최적의 값을 제공해야 합니다. 사용 패턴은 응용 프로그램마다 다르므로 매개 변수의 조합이 다른 풀을 조정하여 최적의 솔루션에 도달합니다. 인터페이스 org.apache.commons.PoolableObjectFactory는 풀링 구성 요소를 구현하는 데 필수적임을 증명하는 다음 수명 주기 메서드를 정의합니다. 기본적으로 개체 풀은 저장된 개체를 동적으로 사용하고 다시 사용할 수 있도록 이러한 개체를 저장할 수 있는 저장소로 시각화할 수 있습니다. 또한 개체 풀은 풀된 개체의 수명 주기를 제어합니다. 우리가 요구 사항을 이해, 진짜 물건에 와서 보자.
다행히도 다양한 오픈 소스 개체 풀링 프레임워크를 사용할 수 있으므로 휠을 다시 발견할 필요가 없습니다. 성공적인 풀링 전략의 핵심은 풀을 구성하는 방법에 따라 달라집니다. 구성 매개 변수가 잘 조정되지 않은 경우 잘못 구성된 풀은 리소스 돼지가 될 수 있습니다. 몇 가지 중요한 매개 변수와 그 목적을 살펴 보겠습니다. 경우에 따라 데이터베이스 사용 정책으로 동시 연결 수에 제한이 적용될 수 있습니다. 또한 외부 응용 프로그램은 동시 열려 있는 연결 수를 지시하거나 제한할 수 있습니다. 대표적인 예로 는 등록자(예: BulkRegister)에 사용할 수 있는 활성 소켓 연결 수를 제한하는 도메인 레지스트리(예: Verisign)가 있습니다.
記事を見てくれてありがとうございます!