2012-04-17 3 views
7

대기열에 작업을 허용하지 않는 고정 크기 스레드 풀을 만들고 싶습니다. 즉, 스레드 풀이 현재 사용 중이면 들어오는 작업을 완전히 거부해야합니다. documentation을 기반으로, 내 의견으로는이 작업을 수행하는 한 가지 방법은 작업을 인정하지 않는 더미 Queue 객체를 만드는 것입니다. Java에서이를 수행하는 관용적 인 방법은 무엇입니까?큐가없는 ThreadPoolExecutor

답변

10

ThreadPoolExector에는 객체가없는 대기열 인 SynchronousQueue을 사용할 수 있습니다. 캐시 된 스레드 풀은 필요에 따라 새 스레드를 만들기 때문에이 기능을 사용합니다.

대기열에 넣을 수 없지만 RejectedExecutionHandler을 사용하여 현재 스레드에서 작업을 실행하는 것이 좋습니다. 이렇게하면 항상 "즉시"실행됩니다.

현재 : 왜 이렇게하고 싶은지 분명히하는 것이 유용 할 것입니다.

0

왜 그런 일을하고 싶습니까? TP + Q의 근본적인 목적은 작업에 대한 자동 "유지 메커니즘"을 가지며 작업 생성 프로세스에서 작업자를 분리합니다. 당신의 의도가 근로자만큼 많은 수락 가능한 일 패키지를 가지고 있다면 TPE가 정말로 필요하지 않습니다.

+0

작업은 이전 스레드의 대기열에서 대기하지 않고 사용 가능한 스레드가있는 다른 스레드 풀 실행 프로그램을 선택할 수 있습니다. ThreadPoolExecutor 대신에 무엇을 사용해야합니까? –

+0

실행을 제어하려면 TPE를 선택하지 마십시오. 작업을 처리 할 수있는 간단한 작업자 스레드를 가지고있는 것이 더 낫습니다 (사용 가능한 경우). 은 기본 스레드에서 theads를 생성하고 pull/push하는 간단한 Set 입니다. – vivekv

관련 문제