Я использую в своем приложении пулы потоков. Я создал подкласс TreadPoolExecutor и переопределил методы beforeExecute, afterExecute и terminated для статистических целей.
Я также реализовал свою собственную ThreadFactory и переопределил метод newThread.
Я понимаю, что класс-оболочка пула потоков создает дюжину «вызываемых» задач и вызывает метод 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, но не уверен?
Спасибо за вашу помощь,