网站首页 全球最实用的IT互联网站!

人工智能P2P分享Wind搜索发布信息网站地图标签大全

当前位置:诺佳网 > 软件工程 > 后端开发 > Java >

为什么说不推荐使用Executors创建线程池

时间:2025-04-26 00:00

人气:

作者:admin

标签:

导读:首先通过executors创建的线程只有以下五种 Executors.newCachedThreadPool(); 通过构造方法可以得知 无参构造 /** * 最大线程数是 Integer的最大值 * 等待队列使用的是SynchronousQueue * SynchronousQueue 没有...

首先通过executors创建的线程只有以下五种

Executors.newCachedThreadPool();

通过构造方法可以得知

无参构造

   	/**
         * 最大线程数是 Integer的最大值
         * 等待队列使用的是SynchronousQueue
         *  SynchronousQueue 没有容量,等待消费者 transfer
         */
    public static ExecutorService newCachedThreadPool() {
        return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
                                      60L, TimeUnit.SECONDS,
                                      new SynchronousQueue<Runnable>());
    }

有参构造

	  /**
	   * 通过参数传入线程工厂
	   */
   public static ExecutorService newCachedThreadPool(ThreadFactory threadFactory) {
        return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
                                      60L, TimeUnit.SECONDS,
                                      new SynchronousQueue<Runnable>(),
                                      threadFactory);
    }

Executors.newScheduledThreadPool(5);

  	/**
         * 核心线程数可以通过入参控制
         * 最大线程数是 Integer的最大值
         * 等待队列使用的是DelayedWork
         *  DelayedWork 数据结果使用的是可以动态扩容的数组
         */
    public ScheduledThreadPoolExecutor(int corePoolSize) {
        super(corePoolSize, Integer.MAX_VALUE, 0, NANOSECONDS,
              new DelayedWorkQueue());
    }

Executors.newSingleThreadExecutor();

  	/**
         * 核心线程和最大线程数都是1,只有单个线程的线程池
         * 等待队列使用的是LinkedBlockingQueue
         *  LinkedBlockingQueue 数据结构使用的是单向链表,同时等待队列的大小是 Integer的上限
         */
   public static ExecutorService newSingleThreadExecutor() {
        return new FinalizableDelegatedExecutorService
            (new ThreadPoolExecutor(1, 1,
                                    0L, TimeUnit.MILLISECONDS,
                                    new LinkedBlockingQueue<Runnable>()));
    }

Executors.newWorkStealingPool();

无参构造

        /**
         * 核心线程数使用的是jvm中可用的处理器数量
         */
    public static ExecutorService newWorkStealingPool() {
        return new ForkJoinPool
            (Runtime.getRuntime().availableProcessors(),
             ForkJoinPool.defaultForkJoinWorkerThreadFactory,
             null, true);
    }

有参构造

        /**
         * 核心线程数是参数大小
         */
    public static ExecutorService newWorkStealingPool(int parallelism) {
        return new ForkJoinPool
            (parallelism,
             ForkJoinPool.defaultForkJoinWorkerThreadFactory,
             null, true);
    }

Executors.newFixedThreadPool(10);

	/**
         * 核心线程数和最大线程数是一样的,通过入参配置
         * LinkedBlockingQueue 数据结构使用的是单向链表,同时等待队列的大小是 Integer的上限
         */
   public static ExecutorService newFixedThreadPool(int nThreads) {
        return new ThreadPoolExecutor(nThreads, nThreads,
                                      0L, TimeUnit.MILLISECONDS,
                                      new LinkedBlockingQueue<Runnable>());
    }

通过Executors创建的线程池通常并不满足我们日常开发的使用场景

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信