假设我有这个:
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();
}
}
通过指定 a 来定义如何创建池的线程ThreadFactory https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/concurrent/ThreadFactory.html.
Executors.newFixedThreadPool(1, new ThreadFactory() {
@Override
public Thread newThread(Runnable r) {
return new Thread(r) {
@Override
public void interrupt() {
// do what you need
}
};
}
});
Sure, a ThreadFactory
可以用 lambda 来表示。
ThreadFactory factory = (Runnable r) -> new YourThreadClass(r);
如果线程不需要额外的设置(例如使其成为守护进程),则可以使用方法引用。构造函数YourThreadClass(Runnable)
不过应该存在。
ThreadFactory factory = YourThreadClass::new;
我建议阅读以下文档ThreadPoolExecutor https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/concurrent/ThreadPoolExecutor.html and Executors https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/concurrent/Executors.html。他们的信息非常丰富。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)