说我有这样的:
class Queue {
private static ExecutorService executor = Executors.newFixedThreadPool(1);
public void use(Runnable r){
Queue.executor.execute(r);
}
}
我的问题是 - 我怎么可以定义在池中使用的线程,特别是想在游泳池覆盖上线(S)中断方法:
@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
可以通过拉姆达表示。
ThreadFactory factory = (Runnable r) -> new YourThreadClass(r);
如果有需要的线程(如使其成为一个守护进程)没有额外的设置,您可以使用方法参考。构造函数YourThreadClass(Runnable)
应该存在,虽然。
ThreadFactory factory = YourThreadClass::new;
我建议阅读的文档ThreadPoolExecutor
和Executors
。他们是相当翔实。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句