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

时间:2019-02-06 23:54:48

标签: java multithreading threadpool executorservice

说我有这个:

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();
      }
    }

1 个答案:

答案 0 :(得分:5)

通过指定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;

我建议您阅读ThreadPoolExecutorExecutors的文档。他们提供了很多信息。