大家好,又见面了,我是你们的朋友全栈君。
一、工作中使用线程池的好处: 1.降低资源消耗,线程的创建和消耗是非常消耗资源的,使用线程池可以避免线程的频繁创建和消耗,从而降低资源消耗。 2.提高响应速度,当请求到达时,线程池可以为请求直接分配一个线程,因此就不用等待线程创建就可以立即执行。 3.线程池可以很好的管理线程。
二、java中有哪些常用的线程池(java.util.concurrent.Executors): 1.CachedThreadPool:可缓存线程池,它是一个可以无限扩大的线程池。 创建方法为:Executors.newCachThreadPool(); 2.FixedThreadPool:固定线程池,即线程池中线程个数是固定的。 创建方法为:Executors.newFixedThreadPool(3); 3.SingleThreadExecutor:单线程线程池,即只创建一个工作线程来执行任务,单线程线程池最大的特点就是可以保证顺序执行各个任务。 创建方法为:Executors.newSingleThreadExecutcor(); 4.ScheduleThreadPool:定长线程池,且支持定时及周期性任务。 创建方法为:Executors.newScheduleThreadPool(5);
三、这样创建线程池有什么问题: 上述线程池的创建方式,可能会导致OOM,例如:FixedThreadPool和SingelThreadPool允许的请求队列长度为:Integer.MAX_VALUE,这样可能堆积大量请求,导致OOM;而CachedThreadPool允许创建的线程数量为Integer.MAX_VALUE,这样可能创建大量的线程,导致OOM.。 所以建议通过ThreadPoolExecutor来创建线程池,方式如下: new ThreadPoolExecutor(10,//核心线程数 20,//最大线程数 1L,//空闲线程存活时间 TimeUnit.MILLISECONDS,//空闲线程存活时间单位 new LinkedBlockingQueue(1024),//阻塞队列 new ThreadFactoryBuilder().setNameFormat(“demo-pool-%d”).build(),//线程工厂 new ThreadPoolExecutor.AbortPolicy());//拒绝策略
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/188308.html原文链接:https://javaforall.cn