覆盖中断方法在线程池线程

亚历山大·米尔斯:

说我有这样的:

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();
      }
    }
安德鲁Tobilko:

定义如何对池中的线程通过指定创建的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;

我建议阅读的文档ThreadPoolExecutorExecutors他们是相当翔实。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章