Java线程池详细介绍


这篇文章主要介绍“Java线程池详细介绍”,在日常操作中,相信很多人在Java线程池详细介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java线程池详细介绍”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!之所以要使用线程池,是因为使用new Thread在大型项目中是有弊端的:每次new Thread新建对象,性能差线程缺乏统一管理,可能无限制的新建线程,相互竞争,有可能会造成过多占用系统资源而导致OOM缺少更多功能,如定期执行等而线程池的好处:重用存在的线程,减少对象创建、消亡的开销,性能佳可有效控制最大并发线程数,提高系统资源利用率,同时可以避免过多资源竞争,避免阻塞提供定时执行、定期执行、单线程、并发数控制等功能Executor是一个顶层接口,在它里面只声明了一个方法execute(Runnable),返回值为void,参数为Runnable类型,从字面意思可以理解,就是用来执行传进去的任务的ExecutorService接口继承了Executor接口,并声明了一些方法:submit、invokeAll、invokeAny以及shutDown等抽象类AbstractExecutorService实现了ExecutorService接口,基本实现了ExecutorService中声明的所有方法ThreadPoolExecutor继承了类AbstractExecutorService。execute()实际上是Executor中声明的方法,在ThreadPoolExecutor进行了具体的实现,这个方法是ThreadPoolExecutor的核心方法,通过这个方法可以向线程池提交一个任务,交由线程池去执行submit()方法是在ExecutorService中声明的方法,在AbstractExecutorService就已经有了具体的实现,在ThreadPoolExecutor中并没有对其进行重写,这个方法也是用来向线程池提交任务的,但是它和execute()方法不同,它能够返回任务执行的结果,去看submit()方法的实现,会发现它实际上还是调用的execute()方法,只不过它利用了Future来获取任务执行结果shutdown()优雅关闭线程池shutdownNow()强制关闭线程池还有很多其他的方法:比如:getQueue() 、getPoolSize() 、getActiveCount()、getCompletedTaskCount()等获取与线程池相关属性的方法,可以用于线程池监控,有兴趣的朋友可以自行查阅API。更多ThreadPoolExecutor配置的详细说明,点击查看:还在用Executors创建线程池?小心内存溢出特别提示:通过ScheduledExecutorService执行的周期任务,如果任务执行过程中抛出了异常,那么ScheduledExecutorService就会停止执行任务,而且也不会再周期地执行该任务了。所以如果想保持任务周期执行,需要catch一切可能的异常。CPU密集型任务:尽量压榨CPU,参考值设置为NCPU+1
IO密集型任务:参考值可以设置为2*NCPUTaskExecutor是Spring 香港云主机异步线程池的接口,继承Java.util.concurrent.Executor接口Spring已经实现的异步线程池(TaskExecutor的实现类):SimpleAsyncTaskExecutor:不是真的线程池,这个类不重用线程,每次调用都会创建一个新的线程。SyncTaskExecutor:这个类没有实现异步调用,只是一个同步操作。只适用于不需要多线程的地方ConcurrentTaskExecutor:Executor的适配类,不推荐使用。如果ThreadPoolTaskExecutor不满足要求时,才用考虑使用这个类SimpleThreadPoolTaskExecutor:是Quartz的SimpleThreadPool的类。线程池同时被quartz和非quartz使用,才需要使用此类ThreadPoolTaskExecutor :最常使用,推荐。 其实质是对java.util.concurrent.ThreadPoolExecutor的包装@Async将方法标注为异步方法,Spring扫描到后,执行该方法时,会另起新线程去执行,非常简单为了让@Async注解能够生效,还需要在Spring Boot的主程序中配置@EnableAsync@Async所修饰的函数不要定义为static类型,这样异步调用不会生效到此,关于“Java线程池详细介绍”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注开发云网站,小编会继续努力为大家带来更多实用的文章!

相关推荐: 如何快速处理数据库中大量数据

本篇内容主要讲解“如何快速处理数据库中大量数据”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何快速处理数据库中大量数据”吧!将数百张数据结构相同的表(用Tn代表),合并至一张表(用C代表)T表数据量分布很不均衡,…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 08/08 22:26
下一篇 08/08 22:26

相关推荐