내 응용 프로그램에서 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를 서브 클래스 할 필요가 있을지 모르겠다. 당신의 도움에 대한
감사합니다,
나는 그가 Before/AfterExecute()가 Runnable 객체 대신 Callable tasks를 처리하는 방법에 대해 묻고 있다고 생각한다. – Will