Java并发-线程池
文章平均质量分 82
java线程池的案例
OkidoGreen
这个作者很懒,什么都没留下…
展开
-
Spring默认线程池SimpleAsyncTaskExecutor
SimpleAsyncTaskExecutor,不是真的线程池,这个类不重用线程,每次调用都会创建一个新的线程,没有最大线程数设置。简单的通过 synchronized 和 wati and notify 达到控制线程数量的效果,从而实现限流的策略。在Java中创建线程并不便宜,线程对象占用大量内存,在大型应用程序中,分配和取消分配许多线程对象会产生大量。这是不是和我们印象中的的线程池不一样,可以说是相悖的,完美躲过线程池优势。doExecute方法:看到这,就知道了,每次都会创建新线程去执行任务。转载 2023-05-09 17:42:46 · 697 阅读 · 0 评论 -
java8 新线程池 newWorkStealingPool
大家好,偶然间在论坛发现大家对于 java8 中新增的线程池说明的比较少(可能是应用的比较少)以至于可能好多人都不知道这个新的线程池的存在,所以想要发一片文章想要说明下。新的改变java8 中创建了一个新的具有抢占式操作的线程池,每个线程都有一个任务队列存放任务。区别看过源码的同学都知道之前的线程池都是通过 ThreadPoolExecutor 创建出来的。而创建参数中有一个队列参数用于存放任务。而这些队列的长度都是Integer的最大值。这就导致在实际应用中会造成内存溢出情况。这也是为什么阿里转载 2022-04-13 15:17:59 · 1546 阅读 · 1 评论 -
如何优雅的关闭Java线程池
面试中经常会问到,创建一个线程池需要哪些参数啊,线程池的工作原理啊,却很少会问到线程池如何安全关闭的。也正是因为大家不是很关注这块,即便是工作三四年的人,也会有因为线程池关闭不合理,导致应用无法正常stop的情况,还有出现一些报错的问题。本篇就以ThreadPoolExecutor为例,来介绍下如何优雅的关闭线程池。01 线程中断在介绍线程池关闭之前,先介绍下Thread的interrupt。在程序中,我们是不能随便中断一个线程的,因为这是极其不安全的操作,我们无法知道这个线程正运行在什转载 2020-09-19 10:27:34 · 652 阅读 · 0 评论 -
使用RunTime.getRunTime().addShutdownHook优雅关闭线程池
有时候我们用到的程序不一定总是在JVM里面驻守,可能调用完就不用了,释放资源.RunTime.getRunTime().addShutdownHook的作用就是在JVM销毁前执行的一个线程.当然这个线程依然要自己写.利用这个性质,如果我们之前定义了一系列的线程池供程序本身使用,那么就可以在这个最后执行的线程中把这些线程池优雅的关闭掉.比如我们定义了一个线程池private Exe...转载 2020-04-26 15:51:52 · 881 阅读 · 0 评论 -
Java线程池实现原理及其在美团业务中的实践
一、写在前面1.1 线程池是什么线程池(Thread Pool)是一种基于池化思想管理线程的工具,经常出现在多线程服务器中,如MySQL。线程过多会带来额外的开销,其中包括创建销毁线程的开销、调度线程的开销等等,同时也降低了计算机的整体性能。线程池维护多个线程,等待监督管理者分配可并发执行的任务。这种做法,一方面避免了处理任务时创建销毁线程开销的代价,另一方面避免了线程数量膨胀导致的过...转载 2020-04-09 17:12:45 · 724 阅读 · 0 评论 -
你知道如何安全正确的关闭线程池吗?
我们知道应用停机时需要释放资源,关闭连接,而对于一些定时任务或者网络请求服务会使用线程池,当应用停机时我们需要正确安全的关闭线程池,如果处理不当,可能造成数据丢失,业务请求结果不正确等问题。关闭线程池我们可以选择什么都不做,JVM 关闭时自然的会清除线程池对象。当然这么做,存在很大的弊端,线程池中正在执行执行的线程以及队列中还未执行任务将会变得极不可控。所以我们需要想办法控制到这些未执行的任务...转载 2020-02-05 15:06:37 · 534 阅读 · 0 评论 -
Java线程(六):线程池
自JDK5之后,Java推出了一个并发包,java.util.concurrent,在Java开发中,我们接触到了好多池的技术,String类的对象池、Integer的共享池、连接数据库的连接池、Struts1.3的对象池等等,池的最终目的都是节约资源,以更小的开销做更多的事情,从而提高性能。 我们的web项目都是部署在服务器上,浏览器端的每一个request就是一个线...转载 2014-06-05 16:55:22 · 1193 阅读 · 0 评论 -
Java 线程池
介绍new Thread的弊端及Java四种线程池的使用,对Android同样适用。本文是基础篇,后面会分享下线程池一些高级功能。1、new Thread的弊端执行一个异步任务你还只是如下new Thread吗?Java 1 2 3 4 5 6 7 newTh...转载 2014-01-16 12:56:35 · 1337 阅读 · 0 评论 -
ScheduledExecutorService创建newScheduledThreadPool线程池遇到的问题
最近线程池老是遇到执行两次的情况,故作了分析,情况如下package test;import java.util.Date;import java.util.concurrent.ExecutionException;import java.util.concurrent.Executors;import java.util.concurrent.ScheduledExecu...原创 2014-12-29 21:33:22 · 11990 阅读 · 0 评论 -
线程池ThreadPoolExecutor使用简介
一、简介线程池类为 java.util.concurrent.ThreadPoolExecutor,常用构造方法为:ThreadPoolExecutor(int corePoolSize, int maximumPoolSize,long keepAliveTime, TimeUnit unit,BlockingQueueworkQueue,RejectedExecution...转载 2016-11-06 17:27:14 · 1666 阅读 · 0 评论 -
Spring的线程池和JDK的线程池的区别?
API 文档中很清楚,SpringFrameWork 的 ThreadPoolTaskExecutor 是辅助 JDK 的 ThreadPoolExecutor 的工具类,它将属性通过 JavaBeans 的命名规则提供出来,方便进行配置。1.ThreadPoolExecutorSpring中的ThreadPoolTaskExecutor是借助于JDK并发包中的java.util.conc...转载 2017-03-13 14:29:29 · 12922 阅读 · 1 评论 -
再聊线程池
引言最近恰好在组内分享线程池,又看了看四年前自己写的线程池文章,一是感叹时光荏苒,二是感叹当时的理解太浅薄了,三是感叹自己这么多年依然停留在浅薄的理解当中,没有探究其实现,羞愧难当。遂把分享的内容整理出来,希望能够让读者对线程池有一个全新的认识。池化这里池化并不是深度学习中的池化,而是将资源交给池来管理的这一过程。我们在开发中经常回接触到池化资源的技术,最常见的当然是数据库连接池,以及...转载 2017-03-27 11:10:46 · 905 阅读 · 0 评论 -
ThreadPoolExecutor使用和思考(上)-线程池大小设置与BlockingQueue的三种实现区别
工作中多处接触到了ThreadPoolExecutor。趁着现在还算空,学习总结一下。前记:jdk官方文档(javadoc)是学习的最好,最权威的参考。 文章分上中下。上篇中主要介绍ThreadPoolExecutor接受任务相关的两方面入参的意义和区别,池大小参数corePoolSize和maximumPoolSize,BlockingQueue选型(SynchronousQue...转载 2017-03-27 11:15:38 · 1047 阅读 · 0 评论 -
线程池ThreadPoolExecutor及常见的4种
https://blog.csdn.net/qq_23391049/article/details/80373511为什么用线程池 创建/销毁线程伴随着系统开销,过于频繁的创建/销毁线程,会很大程度上影响处理效率 例如: 记创建线程消耗时间T1,执行任务消耗时间T2,销毁线程消耗时间T3 如果T1+T3>T2,那么是不是说开启一个线程来执行这个任务太不划算了!...转载 2018-05-31 10:44:14 · 3548 阅读 · 0 评论 -
如何合理地估算线程池大小?
http://ifeve.com/how-to-calculate-threadpool-size/如何合理地估算线程池大小?这个问题虽然看起来很小,却并不那么容易回答。大家如果有更好的方法欢迎赐教,先来一个天真的估算方法:假设要求一个系统的TPS(Transaction Per Second或者Task Per Second)至少为20,然后假设每个Transaction由一个线程...转载 2018-05-31 11:32:24 · 852 阅读 · 0 评论 -
【开发规约】并发-自定义线程及线程池ThreadFactory,方便出错回溯
最近没事看了下 阿里的开发手册,有些东西我觉得还是有必要遵守或者知晓的,在代码里有多线程或者并发处理的情况下,万一出现了线上问题或者Bug,日志中默认看到的打印日志,都显示的是“pool-1-thread-1”,“pool-1-thread-2” 这种的,很不容易发现问题,无法定位。所以在项目中,创建线程的地方推荐使用自定义的线程工厂ThreadFactory来进行创建,指定当时Thr...原创 2019-06-07 11:31:27 · 2809 阅读 · 1 评论 -
线程池(ThreadPoolExecutor ) 的关闭与监控
https://blog.csdn.net/wangmx1993328/article/details/80648238参考文章:《线程池理论 之 线程池饱和策略 与 工作队列排队策略》、《线程池(ThreadPoolExecutor) 创建与使用》关闭线程池可以通过调用线程池的shutdown或shutdownNow方法来关闭线程池。原理都是遍历线程池中的工作线程,然后逐个调用线...转载 2019-06-07 11:50:55 · 3571 阅读 · 0 评论 -
如何正确的关闭线程池?
首先看源码中的一句注释:A pool that is no longer referenced in a program and has no remaining threads will be shutdown automatically.如果程序中不再持有线程池的引用,并且线程池中没有线程时,线程池将会自动关闭。线程池自动关闭的两个条件:1、线程池的引用不可达;2、线程池中没有...转载 2020-02-04 15:40:50 · 1120 阅读 · 0 评论