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

叠石桥网站建设muiteer主题 wordpress

叠石桥网站建设,muiteer主题 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/327421/

相关文章:

  • 网站建设本科毕业设计论文门户网站 特点
  • 网站改版后 存在大量404页面做app需要学什么
  • 做的网站访问不了wordpress悬浮菜单
  • 安全网站建设赣州网络公司电话
  • 顺德建网站的公司已注册域名怎么做网站呢
  • 做商城网站都需要什么中学加强校园网站建设
  • 浏览器怎么打开网站服务器设置榆中县城乡建设局网站
  • 做网站用什么ui美观网站排名怎么上去
  • 自己做鲜花网站怎么样网络程序设计学什么
  • 响应式网站和自适应网站的区别wordpress编辑器 下载
  • 西安seo网站管理网站开发招聘职位
  • 网站建设哪家公司东莞百度seo哪家好
  • 徐州提供网站建设要多少钱常州知名做网站服务
  • 中国造价工程建设管理协会网站重庆住房和城乡建设部网站的打印准考证
  • 水果销售网站开发文献综述360免费wifi怎么安装
  • 可以做宣传的网站有哪些网络公司怎么优化网站
  • 我想创业做网站微信开放文档官网
  • 成华区门户网站如何将一个网页生成链接
  • 海底捞口碑营销北京seo服务行者
  • 安乡网站制作合肥公司做网站
  • 越城区住房和城乡建设局网站网站备案时间
  • 苏州沧浪做网站哪家好电子商城网站建议书
  • 团购网站开发代码青岛网站推广公司
  • 利用python做网站网页源代码下载
  • 酒泉地网站推广仿顺丰优选网站源码
  • 套模板建设网站多少钱wordpress 自带相册
  • 网站建设服务兴田德润响应式布局与自适应布局区别
  • 哪家成都公司做网站怎样做网络营销推广网站营销推广
  • 怎么做网站服务器吗外贸免费建设网站
  • 模板网站建设乐云seo效果好seo外链自动群发工具