Мне нужно разъяснение по ThreadpoolExecutor до перехвата ExExtete и AfterExecute - PullRequest
3 голосов
/ 06 октября 2011

Я использую пулы потоков в своем приложении. Я создал подкласс TreadPoolExecutor и переопределил методы beforeExecute, afterExecute и прекратил работу в статистических целях.
Я также реализовал свой собственный ThreadFactory и переопределил метод newThread.

Я понимаю, что класс-оболочка threadpool создает десяток "вызываемых" задач и вызывает метод invokeAll для получения результатов. В каждой задаче есть объект интерфейса. Базовый объект X реализует интерфейс и несколько раз был разделен на подклассы. Поэтому, когда пул потоков выполняется, он запускает дочерние объекты объекта 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

Мои вопросы: как получить информацию, хранящуюся в вызываемой задаче, когда я вызываю ловушки до и после выполнения? или я думаю, что я пытаюсь сделать, это дать конкретное имя для каждого потока пула потоков, это возможно?

Я ясно вижу, что информация находится в представлении переменных Eclipse в режиме отладки, скрытом в объекте Runnable / FutureTask / callable.

Я не понимаю, почему мне нужно только переопределить методы (beforeExecute, afterExecute) с объектами Runnable и без Callable (так как мне нужно получить результаты). Что-то мне не хватает или не понятно? Может быть, мне нужно подкласс FutureTask не уверен?

Спасибо за вашу помощь,

1 Ответ

0 голосов
/ 06 октября 2011

Было бы проще суперклассировать DoTask, если вы хотите, чтобы что-то происходило до и после каждого вызова вместо переопределения beforeExecute и afterExecute.

Редактировать: Кроме того, если вы используете вызываемые элементыВы можете использовать ExecutorService.

...