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

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

最佳答案

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

相关文章:

c# - 在 Ant 中使用 csc 任务构建时出现问题

multithreading - "the type does not fulfill the required lifetime"在线程中使用方法时

c# - C#中的多线程序列化

java - Web 应用程序中异步任务的线程池配置

java - 在 Map Java 中转换嵌套 JsonArray

java - 有没有可能看到 *.war 文件执行的日志?

java - 通过java在MySql中存储字符串数组?

c# - 线程是否必要/有用?

java - 如何从调用同一变量的两个线程中获取相同的值?

threadpool - 连接池和文件句柄