gpt4 book ai didi

java - 覆盖线程池中线程的中断方法

转载 作者:搜寻专家 更新时间:2023-10-31 19:51:46 28 4
gpt4 key购买 nike

假设我有这个:

class Queue {
private static ExecutorService executor = Executors.newFixedThreadPool(1);

public void use(Runnable r){
Queue.executor.execute(r);
}

}

我的问题是 - 我如何定义池中使用的线程,特别是想覆盖池中线程的中断方法:

   @Override 
public void interrupt() {
synchronized(x){
isInterrupted = true;
super.interrupt();
}
}

最佳答案

通过指定 ThreadFactory 来定义如何为池创建线程.

Executors.newFixedThreadPool(1, new ThreadFactory() {
@Override
public Thread newThread(Runnable r) {
return new Thread(r) {
@Override
public void interrupt() {
// do what you need
}
};
}
});

当然,ThreadFactory 可以用 lambda 表达式表示。

ThreadFactory factory = (Runnable r) -> new YourThreadClass(r);

如果线程不需要额外的设置(比如将其设为守护进程),您可以使用方法引用。不过,构造函数 YourThreadClass(Runnable) 应该存在。

ThreadFactory factory = YourThreadClass::new;

我建议阅读 ThreadPoolExecutor 的文档和 Executors .它们提供的信息非常丰富。

关于java - 覆盖线程池中线程的中断方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54564377/

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