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

江苏个人网站备案要求抖音怎么推广

江苏个人网站备案要求,抖音怎么推广,做纺织的用什么网站,株洲seo优化排名线程饥饿死锁 在单线程的Executor中,如果任务A将任务B提交给同一个Executor,并且等待任务B的结果,就会引发死锁线程池中所有正在执行任务的线程由于等待其他仍处于工作队列中的任务而阻塞 执行时间较长的任务 执行时间较长的任务不仅会造成…

线程饥饿死锁

  • 在单线程的Executor中,如果任务A将任务B提交给同一个Executor,并且等待任务B的结果,就会引发死锁
  • 线程池中所有正在执行任务的线程由于等待其他仍处于工作队列中的任务而阻塞

执行时间较长的任务

执行时间较长的任务不仅会造成线程池阻塞,也会增加执行时间较短的任务的服务时间

对于平台库的可阻塞方法都定义了限时版本,如BlockingQueue.put,若超过等待时间,则可以中止任务或重新放回队列后续执行

设置线程池的大小

对于计算密集型的任务,在有N个处理器的系统上,线程池大小为N+1能实现最优利用率

对于其他情况

在这里插入图片描述

ThreadPoolExecutor

通过一系列参数配置线程池

  • corePoolSize:核心线程数,当allowsCoreThreadTimeOut=true且核心线程闲置时间超过keepAliveTime就会终止,否则一直存活
  • maximumPoolSize:最大线程数,超过后接下来的任务会被阻塞
  • keepAliveTime:非核心线程闲置时间,超过后非核心线程会被回收,当allowsCoreThreadTimeOut=true同样作用于核心线程
  • unit:指定keepAliveTime的时间单位
  • workQueue:线程池的任务队列,存储execute()提交的Runnable对象
  • threadFactory:线程工厂,为线程池创建新线程
  • handler:当线程池已满或无法成功执行时,使用饱和策略
public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable> workQueue,ThreadFactory threadFactory,RejectedExecutionHandler handler) {if (corePoolSize < 0 ||maximumPoolSize <= 0 ||maximumPoolSize < corePoolSize ||keepAliveTime < 0)throw new IllegalArgumentException();if (workQueue == null || threadFactory == null || handler == null)throw new NullPointerException();this.corePoolSize = corePoolSize;this.maximumPoolSize = maximumPoolSize;this.workQueue = workQueue;this.keepAliveTime = unit.toNanos(keepAliveTime);this.threadFactory = threadFactory;this.handler = handler;
}

管理队列任务

ThreadPoolExecutor允许提供一个BlockingQueue保持执行的任务,基本队列有3种

  • 无界队列,newFixedThreadPool和newSingleThreadPool使用LinkedBlockingQueue
  • 有界队列,如ArrayBlockingQueue,有界的LinkedBlockingQueue和PriorityBlockingQueue
  • 同步移交,newCachedThreadPool使用SynchronousQueue,避免任务排队,直接将任务从生产者移交给工作者线程

只有当任务互相独立,线程池和工作队列设置界限才是合理的,否则有界的线程池或队列可能导致线程饥饿死锁问题

饱和策略

当有界队列被填满后,将会使用饱和策略RejectedExecutionHandler,其包含

  • AbortPolicy:默认策略,抛出RejectedExecutionException,调用者需捕获异常并自行处理
  • CallerRunsPolicy:将某些任务回退给调用者,在调用了execute的线程中执行该任务(如主线程提交任务会退回给主线程执行)
  • DiscardPolicy:抛弃新提交的任务
  • DiscardOlderstPolicy:抛弃下一个将被执行的任务,尝试重新提交新的任务

线程工厂

线程池通过线程工厂创建线程,默认线程工厂创建一个新的非守护线程,可通过重新ThreadFatory的newThread方法自定义配置信息,每次创建线程都会调用该方法

如下为线程池中的线程设置名字和setUncaughtExceptionHandler

class MyThreadFactory implements ThreadFactory {@Overridepublic Thread newThread(Runnable r) {Thread thread = new Thread("AAA");thread.setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {@Overridepublic void uncaughtException(@NonNull Thread t, @NonNull Throwable e) {System.out.println(e.toString());}});return thread;}
}

修改线程池配置

可将对象转为ThreadPoolExecutor,再调用对应属性的setter方法,但newSingleThreadExecutor除外,其使用unconfigurableExecutorService封装,只暴露了ExecutorService中的方法

public class A {public ExecutorService test() {ExecutorService cachedThreadPool = Executors.newCachedThreadPool();if (cachedThreadPool instanceof ThreadPoolExecutor) {((ThreadPoolExecutor) cachedThreadPool).setCorePoolSize(10);}return Executors.unconfigurableExecutorService(cachedThreadPool);}
}

扩展ThreadPoolExecutor

可在子类中重写

  • beforeExecute,线程执行前调用
  • afterExecute,线程执行完后调用,无论线程正常返回还是抛出异常都会调用(但任务完成后出现Error则不会)
  • terminated,线程池关闭时调用
http://www.shuangfujiaoyu.com/news/20906.html

相关文章:

  • wordpress仿砍柴网seo网络推广公司
  • 推广网站概况seo 网站优化推广排名教程
  • 网站雪花代码襄阳网站seo
  • 潍坊做电商的网站建设线上商城的推广方案
  • magento跨境b2b网站建设seo是什么味
  • 网络赚钱平台站长工具seo综合查询下载
  • 南宁哪个公司做网站建设黑帽seo优化
  • 学做家常菜的网站有哪些人工智能培训班
  • wordpress 反应慢昆明自动seo
  • 番禺区保安服务公司seo做什么网站赚钱
  • 建设银行官方网站网页版上海关键词排名提升
  • 四川省城乡住房建设部网站首页搜索引擎优化不包括
  • 系统测试包括哪些内容优化大师官网下载安装
  • 网站一个按钮如何做跳转其他链接关键词seo报价
  • wordpress新站SEO优化西安做网页的公司
  • php交友网站开发实例关键词广告
  • 更新wordpress 504网站seo 优化
  • 网站的建设成本的账务处理第一接单网app地推和拉新
  • 门户网站建设依据今日头条网站推广
  • 企业建设网站费用百度技术培训中心
  • 提升网站流量的方法新闻实时报道
  • 网站不备案可以做微信小程序么获客软件排名前十名
  • 网站建设网络推广书生长春百度网站优化
  • 网页设计作业网站素材和效果图百度搜索 手机
  • 公司设计图平面百度seo搜索营销新视角
  • 大兴网站开发网站建设价格合肥关键词排名技巧
  • wordpress seo怎么做搜索引擎优化策略应该包括
  • 成品网站建设价格百度问一问在线咨询客服
  • 设计开发评审报告seo排名平台
  • 优秀购物网站建设谷歌seo和百度seo区别