首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Executors.newSingleThreadExecutor()和Executors.newFixedThreadPool(1)之间的任何差异

Executors.newSingleThreadExecutor()和Executors.newFixedThreadPool(1)之间的任何差异
EN

Stack Overflow用户
提问于 2010-10-12 01:29:30
回答 1查看 3.8K关注 0票数 1

我在想,Executors.newSingleThreadExecutor()Executors.newFixedThreadPool(1)有什么区别?

以下内容是从javadoc中选择的。

与其他等价的newFixedThreadPool(1)不同,返回的执行器保证不会被重新配置为使用其他线程。

我尝试下面的代码,似乎没什么不同。

代码语言:javascript
复制
package javaapplication5;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author yan-cheng.cheok
 */
public class Main {
    public static void main(String[] args) {
        new Main();
    }

    public Main() {
        //ExecutorService threadExecutor = Executors.newSingleThreadExecutor();
        ExecutorService threadExecutor = Executors.newFixedThreadPool(1);
        threadExecutor.submit(new BadTask());
        threadExecutor.submit(new Task());      
    }

    class BadTask implements Runnable {
        public void run() {
            throw new RuntimeException();
        }
    }

    class Task implements Runnable {
        public void run() {
            for (int i = 0; i < 100; i++) {
                System.out.println("[LIVE]");
                try {
                    Thread.sleep(200);
                } catch (InterruptedException ex) {
                    Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }
    }
}

很可能我的理解有问题:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-10-12 01:35:44

就像上面说的:

与其他等价的newFixedThreadPool(1)不同,返回的执行器保证不会被重新配置为使用其他线程。

不同之处在于(仅) SingleThreadExecutor以后不能调整其线程大小,您可以通过调用ThreadPoolExecutor#setCorePoolSize (首先需要强制转换)对FixedThreadExecutor进行调整。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3911100

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档