ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

线程池终止和构建线程池

2021-06-26 23:02:21  阅读:227  来源: 互联网

标签:nThreads Executors LinkedBlockingQueue 构建 new 终止 线程 ThreadPoolExecutor


线程池终止

优雅行退出

shutdown() 如果调用了shutdown方法,则线程池处理SHUTDOWN状态,此时线程池不能够接受新的任务,它会等待所有任务执行完毕

强迫行退出

shutdownNow() 如果调用了shutdownNow()方法 则线程池处于STOP状态,此时线程池不能接受新的任务,并且会去尝试终止正在执行的任务。

为什么不建议使用Executors构建线程池

Executors提供的很多默认的使用的都是无界的LInkedBlockingQueue,在高负载技术场景下,无界队列很容易导致OOM(OutOfMemory ,内存溢出)。因此,强烈建议使用有界队列

	//Executors 类中 线程池构造方法 大部分都是LinkedBlockingQueue 无界队列
	public static ExecutorService newFixedThreadPool(int nThreads) {
        return new ThreadPoolExecutor(nThreads, nThreads,
                                      0L, TimeUnit.MILLISECONDS,
                                      new LinkedBlockingQueue 无界队列<Runnable>());
    }

	 public static ExecutorService newSingleThreadExecutor() {
        return new FinalizableDelegatedExecutorService
            (new ThreadPoolExecutor(1, 1,
                                    0L, TimeUnit.MILLISECONDS,
                                    new LinkedBlockingQueue<Runnable>()));
    }	
	public static ExecutorService newFixedThreadPool(int nThreads, ThreadFactory threadFactory) {
        return new ThreadPoolExecutor(nThreads, nThreads,
                                      0L, TimeUnit.MILLISECONDS,
                                      new LinkedBlockingQueue<Runnable>(),
                                      threadFactory);
    }

为什么不建议使用Executors静态工厂构建线程池

FixedThreadPool和SingleThreadPool

允许的请求队列(底层实现是LinkedBlockingQueue) 长度为Integer.MAX_VALUE ,可能会堆积大量的请求 导致 OOM

CachedThreadPool和ScheduledThreadPool

允许的创建线程数量为Integer.MAX_VALUE,可能会创建大量的线程,导致OOM

避免使用Executors创建线程池,主要是避免使用其中的默认实现,我们可以自己直接调用ThreadPoolExecutor的构造函数来自己创建线程池。在创建的同时,给BlockQueue指定容量就可以了

标签:nThreads,Executors,LinkedBlockingQueue,构建,new,终止,线程,ThreadPoolExecutor
来源: https://blog.csdn.net/weixin_50087960/article/details/118255940

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有