当前位置: 首页 > 知识库问答 >
问题:

如何在Java终止Threadpool?[关闭]

云霖
2023-03-14
public void createThread(){
  for(int i=o  to 100000){
      method();
    }
}

public void method(){

  ExecutersService threadpool = Executers.newFixedThreadPool(1);
 threadpool.execute(new Runnable(){

    void run(){
       print(Thread.currentThread().getName());
   }
   threadpool.shutdown();

 });
  
}

输出:pool-2=线程-1 pool-3=线程-1,pool-4=线程-1.............

我想要池-2=线程-1池-2=线程-1池-2=线程-1................

Threadpool不能从method()放到外部,每次都需要创建新的Threadpool。我可以完全终止线程池吗?

有什么需要帮忙的吗

共有1个答案

冀鸿才
2023-03-14

如果要使用相同的线程池,要么将其作为变量传递,要么使其成为类的属性

class Test {

    ExecutorService threadpool = Executors.newFixedThreadPool(1);

    public void createThread() {
        for (int i = 0; i < 1000; ++i) {
            method();
        }

        shutdownAndAwaitTermination(threadpool, 5, TimeUnit.MILLISECONDS);
        // or MoreExecutors.shutdownAndAwaitTermination(threadPool, 5,
        // TimeUnit.MILLISECONDS)
    }

    public void method() {
        threadpool.execute(new Runnable() {
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName());
            }
        });
    }

    // Copied from Guava Library
    public void shutdownAndAwaitTermination(ExecutorService service, long timeout, TimeUnit unit) {
        long halfTimeoutNanos = unit.toNanos(timeout) / 2;
        service.shutdown();
        try {
            if (!service.awaitTermination(halfTimeoutNanos, TimeUnit.NANOSECONDS)) {
                service.shutdownNow();
                service.awaitTermination(halfTimeoutNanos, TimeUnit.NANOSECONDS);
            }
        } catch (InterruptedException ie) {
            Thread.currentThread().interrupt();
            service.shutdownNow();
        }
    }
}
 类似资料:
  • 问题内容: 嗨, 我正在尝试编写一个递归函数来计算Java中字符串的长度, 我知道已经存在str.length()函数,但是问题语句想要实现一个递归函数 在C编程语言中,终止字符为“ \ 0”,我只想知道如何知道字符串是否以Java结尾 当我在测试字符串中输入“ \ n”时,我的程序运行良好。请告诉我。谢谢! 输出: 问题答案: 请记住,此代码效率很低,但是它以递归方式计算String的长度。

  • 问题内容: 我在我的一个Java应用程序中使用Socket通信。据我所知,如果程序遇到任何异常终止,侦听端口不会关闭,并且由于报告“端口已打开。”而无法重新启动该程序。处理这个问题?处理此问题的一般方法是什么? 问题答案: 听起来您的程序正在套接字上侦听。通常,当程序退出时,操作系统会关闭所有可能打开的套接字(包括侦听套接字)。但是,对于侦听套接字,操作系统通常在程序退出后将端口保留一段时间(几分

  • 我有一个应用Gradle插件的项目。我的问题是,即使底层进程终止,它也不会终止:如果我运行这个: 带有仅包含系统的主系统。退出(0) 程序终止,但Gradle没有终止。当底层Java程序终止时,如何强制Gradle进程终止? 编辑:我知道我可以调用gradle——stop,但这需要另一个进程,这不是一个选项。

  • 我一直在玩流,然后我注意到当我执行以下操作时,它不会在控制台中产生输出: 我认为这是因为是一个非终止流方法,应该使用而不是来终止流并生成结果: 然而,是否有一种方法可以‘提前’终止流,使用一个自定义的终止方法(函数接口),它除了终止流之外什么都不做?..有没有一个适当的方法来利用Java现有的东西来做到这一点? 我知道我可以这样做: 但那感觉很浪费。

  • 本文向大家介绍如何终止WebWork?相关面试题,主要包含被问及如何终止WebWork?时的应答技巧和注意事项,需要的朋友参考一下 Web Worker 使用教程

  • 问题内容: 我想在finally块中关闭流,但是它抛出一个,因此看来我必须在块中嵌套另一个块才能关闭流。这是正确的方法吗?似乎有点笨拙。 这是代码: 问题答案: 似乎有点笨拙。 它是。至少java7尝试使用资源可以解决该问题。 在java7之前,您可以创建一个吞咽它的函数: 或将try …最终放入try catch中: 它比较冗长,并且finally中的异常会在try中隐藏一个,但从语义上讲它更接