Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我需要关于ThreadpoolExecutor beforeExecute和afterExecute挂钩的说明_Java_Multithreading_Executors - Fatal编程技术网

Java 我需要关于ThreadpoolExecutor beforeExecute和afterExecute挂钩的说明

Java 我需要关于ThreadpoolExecutor beforeExecute和afterExecute挂钩的说明,java,multithreading,executors,Java,Multithreading,Executors,我正在应用程序中使用线程池。出于统计目的,我对TreadPoolExecutor进行了子分类,并覆盖了beforeExecute、afterExecute和Terminate方法。 我还实现了自己的ThreadFactory并重写了newThread方法 我知道threadpool包装器类创建了十几个“可调用”任务,并调用invokeAll方法来获得结果。在每个任务中都有一个接口对象。BaseX对象实现了接口,并且已经被多次子类化。因此,当执行线程池时,它会启动对象X的child 从代码的角度来

我正在应用程序中使用线程池。出于统计目的,我对TreadPoolExecutor进行了子分类,并覆盖了beforeExecute、afterExecute和Terminate方法。
我还实现了自己的ThreadFactory并重写了newThread方法

我知道threadpool包装器类创建了十几个“可调用”任务,并调用invokeAll方法来获得结果。在每个任务中都有一个接口对象。BaseX对象实现了接口,并且已经被多次子类化。因此,当执行线程池时,它会启动对象X的child

从代码的角度来看,它看起来有点像:

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);

我的问题是,当我调用before和after execute挂钩时,如何检索保存在可调用任务中的信息?或者我想我要做的是给线程池的每个线程指定一个特定的名称,这可能吗

我可以清楚地看到,在可运行对象/FutureTask/callable中隐藏的调试模式下的eclipsevariables视图中有这些信息

我不明白为什么我只需要用可运行的对象覆盖方法(beforeExecute,afterExecute),而不需要调用对象(因为我需要检索结果)。我遗漏了什么或不明白什么?也许我需要给FutureTask子类不确定


感谢您的帮助,

如果您希望在每次调用之前和之后发生事情,而不是覆盖执行之前执行之前执行和执行之后执行,那么超类
DoTask
会更容易


编辑:另外,如果您使用的是可调用的,您可能希望使用
ExecutorService

我相信他是在问before/afterExecute()如何处理可调用的任务而不是可运行的任务?
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