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

为什么很少人敢娶外贸女北京网站优化哪家好

为什么很少人敢娶外贸女,北京网站优化哪家好,京伦科技网站做的怎么样,专题网站建设自查整改报告文章详细内容来自:线程数突增!领导:谁再这么写就滚蛋! 下面是看完后文章的,一个总结 线程池的使用不规范,导致程序中线程数不下降,线程数量大。 临时变量的接口,通过下面简单的线…

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

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

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

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

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.15wanjia.com/news/54605.html

相关文章:

  • 建e网全屋设计效果图宁波seo关键词优化方法
  • 美国一般用什么做网站主页软件制作
  • 中国建设银行网站暑假工报名广州seo推广
  • 注册电气师在哪个网站做变更搜狗关键词优化软件
  • 云南省建设培训网站站长工具seo下载
  • 做网站备案微信群推广
  • 网站开发建设需要什么上海单个关键词优化
  • 自己做的网站怎么在移动端访问黑帽seo是什么
  • 企业网站的建立要做的准备淘宝推广
  • 网站设计 尺寸成人电脑培训班办公软件
  • 网站建设活动免费网站在线观看人数在哪直播
  • 威海网站优化公司惠州网站关键词排名
  • 一家做公司点评的网站优化大师软件大全
  • 开发企业网站的公司网站优化方案怎么写
  • app定制公司seo推广视频隐迅推专业
  • 做网站需要什么证明嘛广东网络seo推广公司
  • 二级备案域名泰安网站seo
  • 网站优化如何做pc指数百度推广客服人工电话多少
  • 网站支付功能建设百度地图导航2022最新版
  • 香港新冠肺炎疫情最新消息详细描述如何进行搜索引擎的优化
  • 个人网站程序下载青岛百度快速排名优化
  • 宣传片制作流程天津seo诊断
  • 网站建设服务采购方案seo排名
  • 课程网站开发流程图及原型图西地那非片的功效与作用
  • b2c电子商务网站开发网站查询入口
  • 做电影网站配什么公众号最新热点新闻
  • 用明星名字做网站seo优化的方法有哪些
  • 建设网站所采用的技术刚刚北京传来重大消息
  • 怎么样才能申请网址超级优化大师下载
  • 高端网站开发报价搜狗seo排名软件