2011-10-06 3 views
3

내 응용 프로그램에서 threadpools를 사용하고 있습니다. TreadPoolExecutor를 서브 클래 싱하고 beforeExecute, afterExecute 메소드를 오버라이드하여 통계적 목적으로 종료했습니다.
또한 내 자신의 ThreadFactory를 구현하고 newThread 메서드를 재정의했습니다.ThreadpoolExecutor beforeExecute 및 afterExecute 후크에 대한 설명이 필요합니다.

스레드 풀 래퍼 클래스가 "호출 가능한"태스크를 12 개 만들고 invokeAll 메서드를 호출하여 결과를 얻는 것을 이해합니다. 각 작업에는 인터페이스 객체가 있습니다. 기본 X 객체는 인터페이스를 구현하며 여러 번 하위 클래스로 분류되었습니다.

the wrapper threapool class: 

List<DoTask> tasks;  

tasks.add(new DoTask(new A("A")); 
tasks.add(new DoTask(new B("B")); 
tasks.add(new DoTask(new C("C")); 

results = threadpool.invokeAll(tasks, 60, TimeUnit.Seconds); 

in my DoTask class: public DoTask implements Callable 

constructor: DoTask(ifaceX x) 

im my Base class X: public class X implements ifaceX 
In my child class A, B, C: public A extends X 

내 질문 경우 : 스레드가 코드의 관점에서 객체 X에

의 차일을 시작 실행될 때 그래서 조금처럼 보이는 , 실행 후크를 호출 할 때 호출 가능 태스크에 보관 된 정보를 검색하는 방법은 무엇입니까? 또는 내가 뭘 하려는지 추측은 스레드 풀의 각 스레드에 특정 이름을 부여하는 것입니다 가능한 것인가?

Runnable 객체/FutureTask/callable에 숨겨진 디버그 모드의 Eclipse 변수보기에 정보가 분명하게 표시되어 있습니다.

이유는 (beforeExecute, afterExecute) Runnable 개체 및 호출 할 수있는 것들 (결과를 검색해야하기 때문에) 메서드를 재정의해야하는 이유는 모르겠다. 내가 누락되었거나 이해하지 못하는 것이 있습니까? 아마도 FutureTask를 서브 클래스 할 필요가 있을지 모르겠다. 당신의 도움에 대한

감사합니다,

답변

0

당신이 전에 대신 beforeExecuteafterExecute를 오버라이드 (override)의 각 호출 후에 일어날 일을 원하는 경우가 DoTask를 슈퍼 클래스 쉬울 것입니다.

편집 : 또한 전화 걸기를 사용하는 경우 ExecutorService을 사용할 수 있습니다.

+0

나는 그가 Before/AfterExecute()가 Runnable 객체 대신 Callable tasks를 처리하는 방법에 대해 묻고 있다고 생각한다. – Will

관련 문제