首页 文章

在Executor Service中关闭线程而不关闭它

提问于
浏览
0

我的执行程序服务代码如下所示 . 我正在执行多个线程 . 但由于某些原因,程序没有退出,因为根据日志有一些线程处于等待状态 . 如果我使用Thread.start(),那么我没有那个问题 . 我只是在使用ExecutorService时才遇到问题 . 任何人都可以告诉我如何在不关闭ExecutorService的情况下关闭所有成功执行的线程 .

class ExecutorExample{
    public static void main(){
        File folder = new File("/home/agasthyt/agasthyt");
        File[] listOfFiles = folder.listFiles();
        for (int i = 0; i < listOfFiles.length; i++) {
            Thread1 thread1=new Thread1(listOfFiles[i]);
            es.execute(thread1);
    }
  }
}

class Thread1 extends Thread {public void run()}

1 回答

  • 1

    任何人都可以告诉我如何在不关闭ExecutorService的情况下关闭所有成功执行的线程 .

    这不是 ExecutorService 的用途 . 创建ExecutorService时,您需要为其执行任务,并让它管理它用于执行任务的线程 . 您不应该知道或关心它使用的线程 .

    如果您不再需要它(例如,当您想要终止程序时),则将其关闭 .


    P.S.,你的 Thread1extends Thread . 这是一个坏习惯,会让你陷入一种不太有用的思考线程的方式 . 思考线程和执行程序的正确方法是,线程或执行程序只是执行您提供的一些代码或代码片段 . 而已 .

    我引起他们麻烦的是开发人员给了X线程太多的责任 .

    在一个设计良好的程序中,Y应该是哪个线程并不重要 . 线程应该是匿名的和可互换的 .


    Update:

    您能否建议在不关闭执行程序服务的情况下关闭线程的任何方法 .

    不,我不能 . 如果线程是由ExecutorService创建的,那么你的程序杀掉它背后的那些线程是错误的 .

    Q: 您使用哪个类实现 ExecutorService ?这可能是 ThreadPoolExecutor 吗?也许您可以通过创建一个生成守护程序线程的 ThreadFactory 来解决您的问题,然后使用该工厂构建您的 ThreadPoolExecutor . 守护程序线程不会阻止程序退出 .

相关问题