首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

java线程池(二):聊聊newFixedThreadPool(1)和newSingleThreadExecutor()的区别

文章目录 在第一部分中介绍完java中Executors的线程池创建的方式之后,实际上有一个非常好奇的问题。...既然newFixedThreadPool(1)也能保证创建只有一个线程运行的线程池,那么为什么还需要一个newSingleThreadExecutor()方法呢?带着这个问题我们来详细分析。...: java.util.concurrent.Executors$FinalizableDelegatedExecutorService cannot be cast to java.util.concurrent.ThreadPoolExecutor...at com.dhb.threadpool.DifferentTest.main(DifferentTest.java:17) 也就是说,二者的最大区别在于,newFixedThreadPool(1...分析了newFixedThreadPool(1)和newSingleThreadExecutor()的区别。实际上这两种设计是有原因的。而且对于后者这种将核心功能隔隔离的设计模式,非常值得我们借鉴。

79930
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【小家Java】一次Java线程池误用(newFixedThreadPool)引发的线上血案和总结

    看这块代码的问题:咋一看,好像没什么问题,但深入分析,问题就出现在 Executors.newFixedThreadPool(15)这段代码上。...最终抛出内存异常 Exception in thread "pool-1-thread-295" java.lang.OutOfMemoryError: Java heap space 然而,电脑本机的实体内存...Java提供的四种常用线程池解析 Executors 既然楼主踩坑就是使用了 JDK 的默认实现,那么再来看看这些默认实现到底干了什么,封装了哪些参数。...newFixedThreadPool public static ExecutorService newFixedThreadPool(int nThreads) { return new...LinkedBlockingQueue())); } 注意:该静态方法,禁止使用,因为里面有不少坑,这里不做过多解释 关于线程池的阻塞队列的各种用法,请参见博文: 【小家java

    10K43

    源码分析-使用newFixedThreadPool线程池导致的内存飙升问题

    面试官经常会问这个问题,本文将基于源码,去分析newFixedThreadPool线程池导致的内存飙升问题,希望能加深大家的理解。...线程池源码分析 以上的实例代码,就一个newFixedThreadPool和一个execute方法。...首先,我们先来看一下newFixedThreadPool方法的源码 newFixedThreadPool源码 public static ExecutorService newFixedThreadPool...空闲时间为0,即keepAliveTime为0 阻塞队列为无参构造的LinkedBlockingQueue 线程池特点了解不是很清楚的朋友,可以看我这篇文章,面试必备:Java线程池解析 接下来,我们再来看看线程池执行方法...参考与感谢 《Java并发编程之美》 面试必备:Java线程池解析

    1.4K21

    【小家javaJava中的线程池,你真的用对了吗?(教你用正确的姿势使用线程池,Executors使用中的坑)

    之所以这么说,是因为这种创建线程池的方式有很大的隐患,稍有不慎就有可能导致线上故障,如:【小家Java】一次Java线程池误用(newFixedThreadPool)引发的线上血案和总结 本文我们就来围绕这个问题来分析一下为什么...此类看起来功能还是比较强大的,又用到了工厂模式、又有比较强的扩展性,重要的是用起来还比较方便,如: ExecutorService executor = Executors.newFixedThreadPool...大家也可以完全的遵守一下吧 简单例子模拟一下OOM public class ExecutorsDemo { private static ExecutorService executor = Executors.newFixedThreadPool...实现的: public static ExecutorService newFixedThreadPool(int nThreads) { return new ThreadPoolExecutor...因此是个无界队列 上面提到的问题主要体现在newFixedThreadPool和newSingleThreadExecutor两个工厂方法上,并不是说newCachedThreadPool和newScheduledThreadPool

    1.8K20
    领券