当前位置: 首页 > news >正文

旅游网站开发方案公司网站开发和设计 怎么开票

旅游网站开发方案,公司网站开发和设计 怎么开票,jquery做背景的网站赏析,wordpress 作者头像文章详细内容来自:线程数突增!领导:谁再这么写就滚蛋! 下面是看完后文章的,一个总结 线程池的使用不规范,导致程序中线程数不下降,线程数量大。 临时变量的接口,通过下面简单的线…

文章详细内容来自:线程数突增!领导:谁再这么写就滚蛋!

下面是看完后文章的,一个总结

线程池的使用不规范,导致程序中线程数不下降,线程数量大。

临时变量的接口,通过下面简单的线程池执行,

private static void threadDontGcDemo(){ExecutorService executorService = Executors.newFixedThreadPool(10);executorService.submit(() -> {System.out.println("111");});}

线程不被GC回收,主要是线程池的gc root还是有可达路径的。这里讲个冷知识,这里的线程池的gc root是线程,具体的gc路径是thread->workers->线程池

如果临时采用线程池,需要 手动设置线程池的shutdown,下面写法:

private static void threadDontGcDemo(){ExecutorService executorService = Executors.newFixedThreadPool(10);executorService.submit(() -> {System.out.println("111");});executorService.shutdown();}

原理是,shutdown方法是遍历所有线程,并且调用线程的interrupt()方法,通知线程中断,当worker进行getTask()时,让处于wait的线程打断,抛出异常,workers捕获该worker,workers.remove(w),然后将worker移除workers,这样gc root就不可达了,便会被GC掉。

也就是说线程池的shutdownnow方法调用interruptIdleWorkers去对线程对象interrupt是为了让处于waiting或者是time_waiting的线程抛出异常。

总结为:

  • 线程池调用shutdownnow方法是为了调用worker对象的interrupt方法,来打断那些沉睡中的线程(waiting或者time_waiting状态),使其抛出异常

  • 线程池会把抛出异常的worker对象从workers集合中移除引用,此时被移除的worker对象因为没有到达gc root的路径已经可以被gc掉了

  • 等到workers对象空了,并且当前tomcat线程也结束,此时线程池对象也可以被gc掉,整个线程池对象成功释放

@Async 线程控制

如果不进行线程控制,则异步执行程序越多,会导致线程用尽。

一种方式是全局配置,所有的异步线程共用线程池

@Configuration
public class AsyncConfig implements AsyncConfigurer {@Overridepublic Executor getAsyncExecutor() {ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();executor.setCorePoolSize(10);executor.setMaxPoolSize(20);executor.setQueueCapacity(100);return executor;}@Overridepublic AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {return new CustomAsyncExceptionHandler();}@Overridepublic Integer getAsyncExecutor() {return 30; // 单位为秒}}

另外一种是,@Async标签指定使用的线程池名称

@Configuration
@EnableAsync
public class TaskExcutorConfig {@Bean("taskExecutor")public Executor taskExecutro() {ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();taskExecutor.setCorePoolSize(30);taskExecutor.setMaxPoolSize(50);taskExecutor.setQueueCapacity(200);taskExecutor.setKeepAliveSeconds(60);taskExecutor.setThreadNamePrefix("taskExecutor--");taskExecutor.setWaitForTasksToCompleteOnShutdown(true);taskExecutor.setAwaitTerminationSeconds(60);return taskExecutor;}@Bean("commonExecutor")public Executor commonTaskExecutro() {ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();taskExecutor.setCorePoolSize(50);taskExecutor.setMaxPoolSize(100);taskExecutor.setQueueCapacity(2000);taskExecutor.setKeepAliveSeconds(60);taskExecutor.setThreadNamePrefix("commonExecutor--");taskExecutor.setWaitForTasksToCompleteOnShutdown(true);taskExecutor.setAwaitTerminationSeconds(60);return taskExecutor;}@Bean("notificationExecutor")public Executor notificationExecutor() {ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();taskExecutor.setCorePoolSize(30);taskExecutor.setMaxPoolSize(60);taskExecutor.setQueueCapacity(2000);taskExecutor.setKeepAliveSeconds(60);taskExecutor.setThreadNamePrefix("notificationExecutor--");taskExecutor.setWaitForTasksToCompleteOnShutdown(true);taskExecutor.setAwaitTerminationSeconds(60);return taskExecutor;}
}

使用时标明:

@Async("commonExecutor")
http://www.yayakq.cn/news/669453/

相关文章:

  • 为什么检测行业不能用网站做手机商城网站案例
  • 搭建外文网站vs2010做网站登陆界面
  • 网站是先制作后上线么台州营销型网站建设
  • 重庆市住房和城乡建设厅官方网站查询好吊顶网站
  • 创业邦使用什么网站模板新网站如何做免费推广
  • 网页介绍怎么写免费seo技术教程视频
  • 福建省网站备案用户注销装饰公司东莞网站建设
  • 企业移动网站品牌做网站需要哪些技术知乎
  • 邵阳网站建设优化wordpress中文版广告
  • 护肤品 网站建设策划企业形象设计课程
  • 德州网站seo网站建设安全性原则
  • 网站开发推荐一本书长春
  • 宁波网络建站公司有哪些高端 网站定制
  • 合肥企业建站系统企业申请完域名以后 怎么把网站运行起来
  • phpcms v9 网站搬家网络营销的职能有哪些
  • 什么企业适合做网站网站 网页数量
  • 网站备案 动态ip长春建站的费用
  • 软件开发是学什么英文网站seo方案
  • 宣城 网站建设个人网站怎么命名
  • 制作手机网站哪家好百度关键词优化是什么意思
  • 网站流量 seo界面设计最好的网站
  • 南京建设网站要多少钱天津建设项目验收公示网站
  • 帮朋友免费做网站建设工程施工合同范本2017免费下载
  • 公司网站无法收录奢侈品网站排名
  • 网站建设有哪些平台微信公众号小程序制作
  • 宁波怎么做外贸公司网站怎么做网约车
  • 怎么制作自己的小网站网站底部悬浮代码wordpress
  • 网站建设教程搭建管理平台系统登录入口
  • 做网站的要多钱柳州建设网栗园新居
  • 做企业网站都有什么平台周到的网站建设