gpt4 book ai didi

java - 我需要澄清 ThreadpoolExecutor beforeExecute 和 afterExecute Hook

转载 作者:行者123 更新时间:2023-12-04 20:13:38 26 4
gpt4 key购买 nike

我在我的应用程序中使用线程池。我已经将 TreadPoolExecutor 子类化,并重写了 beforeExecute、afterExecute 和 terminated 方法以用于统计目的。
我还实现了自己的 ThreadFactory 并覆盖了 newThread 方法。

我知道线程池包装器类创建了十几个“可调用”任务并调用 invokeAll 方法来获取结果。在每个任务中都有一个接口(interface)对象。基 X 对象实现了该接口(interface),并被多次子类化。因此,当执行线程池时,它会启动对象 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

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

我可以清楚地看到在 Debug模式下 Eclipse 变量 View 中的信息隐藏在 Runnable 对象/FutureTask/callable 中。

我不明白为什么我只需要用 Runnable 对象覆盖方法(beforeExecute、afterExecute)而不用 Callable 对象(因为我需要检索结果)。我缺少或不明白的东西?也许我不确定是否需要子类化 FutureTask?

谢谢你的帮助,

最佳答案

如果您希望在每次调用之前和之后发生一些事情而不是重写 beforeExecuteafterExecute,那么父类(super class) DoTask 会更容易。

编辑:此外,如果您正在使用可调用对象,您可能需要使用 ExecutorService

关于java - 我需要澄清 ThreadpoolExecutor beforeExecute 和 afterExecute Hook ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7674231/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com