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

西安网站制作河南制作网站

西安网站制作,河南制作网站,网站免费源码大全无需下载,深圳疫情最新发布文章目录 一、简介二、AbortPolicy拒绝策略A. 概述B. 拒绝策略实现原理C. 应用场景D. 使用示例 三、CallerRunsPolicy拒绝策略A. 概述B. 拒绝策略实现原理C. 应用场景D. 使用示例 四、DiscardPolicy拒绝策略A. 概述B. 拒绝策略实现原理C. 应用场景D. 使用示例 五、DiscardOldes…

文章目录

  • 一、简介
  • 二、AbortPolicy拒绝策略
    • A. 概述
    • B. 拒绝策略实现原理
    • C. 应用场景
    • D. 使用示例
  • 三、CallerRunsPolicy拒绝策略
    • A. 概述
    • B. 拒绝策略实现原理
    • C. 应用场景
    • D. 使用示例
  • 四、DiscardPolicy拒绝策略
    • A. 概述
    • B. 拒绝策略实现原理
    • C. 应用场景
    • D. 使用示例
  • 五、DiscardOldestPolicy拒绝策略
    • A. 概述
    • B. 拒绝策略实现原理
    • C. 应用场景
    • D. 使用示例
  • 六、总结
    • 各种拒绝策略的特点和适用场景

一、简介

在Java多线程编程中,我们通常使用线程池来管理和调度任务。线程池由一组预先创建的线程组成,可以重复利用这些线程来执行多个任务,避免频繁地创建和销毁线程而带来的性能开销。

当线程池中的任务队列已满且无法再接受新的任务时,就需要采取拒绝策略来处理这种情况。拒绝策略定义了当无法再接受新的任务时如何处理这些被拒绝的任务。

Java提供了四种常见的拒绝策略:

  1. AbortPolicy(抛出异常):默认的拒绝策略。当任务无法被提交给线程池时,会直接抛出RejectedExecutionException异常。

  2. CallerRunsPolicy(调用者运行):当任务无法被提交给线程池时,会由提交任务的线程自己执行该任务。

  3. DiscardPolicy(直接丢弃):当任务无法被提交给线程池时,直接丢弃该任务,没有任何提示或处理。

  4. DiscardOldestPolicy(丢弃最旧任务):当任务无法被提交给线程池时,会丢弃队列中最早的一个任务,然后尝试再次提交当前任务。

二、AbortPolicy拒绝策略

A. 概述

AbortPolicy是ThreadPoolExecutor的默认拒绝策略,当任务无法被提交给线程池时,会直接抛出RejectedExecutionException异常。

B. 拒绝策略实现原理

实现RejectedExecutionHandler接口,在rejectedExecution方法中抛出异常。

public class AbortPolicy implements RejectedExecutionHandler {public void rejectedExecution(Runnable r, ThreadPoolExecutor e) {throw new RejectedExecutionException("Task " + r.toString() + " rejected from " + e.toString());}
}

C. 应用场景

适用于对任务提交失败要求敏感的场景,需要明确知道任务是否被接受并执行。

D. 使用示例

当线程池的任务队列和线程队列都已满的情况下执行决绝策略

public class Task implements Runnable {private final int index;public Task(int index) {this.index = index;}@Overridepublic void run() {System.out.println(Thread.currentThread().getName() + ":" + index);}
}public class Main {public static void main(String[] args) {// 创建线程池ThreadPoolExecutor threadPool = new ThreadPoolExecutor(1, 1, 0L,TimeUnit.SECONDS,new LinkedBlockingQueue<>(1),new ThreadPoolExecutor.AbortPolicy());try {// 提交任务threadPool.execute(new Task(1));threadPool.execute(new Task(2));threadPool.execute(new Task(3));} catch (RejectedExecutionException e) {e.printStackTrace();} finally {// 关闭线程池threadPool.shutdown();}}
}

三、CallerRunsPolicy拒绝策略

A. 概述

CallerRunsPolicy是一种简单的拒绝策略,当任务无法被提交给线程池时,会由提交任务的线程自己执行该任务。

B. 拒绝策略实现原理

实现RejectedExecutionHandler接口,在rejectedExecution方法中使用提交任务的线程来执行任务。

public class CallerRunsPolicy implements RejectedExecutionHandler {public void rejectedExecution(Runnable r, ThreadPoolExecutor e) {if (!e.isShutdown()) {r.run();}}
}

C. 应用场景

适用于对任务提交失败要求较低的场景,通过调用线程来执行任务,避免任务丢失。

D. 使用示例

public class Task implements Runnable {private final int index;public Task(int index) {this.index = index;}@Overridepublic void run() {System.out.println(Thread.currentThread().getName() + ":" + index);}
}
public class Main {public static void main(String[] args) {// 创建线程池ThreadPoolExecutor threadPool = new ThreadPoolExecutor(1, 1, 0L,TimeUnit.SECONDS,new LinkedBlockingQueue<>(1),new ThreadPoolExecutor.CallerRunsPolicy());try {// 提交任务threadPool.execute(new Task(1));threadPool.execute(new Task(2));threadPool.execute(new Task(3));} catch (RejectedExecutionException e) {e.printStackTrace();} finally {// 关闭线程池threadPool.shutdown();}}
}

在这里插入图片描述

四、DiscardPolicy拒绝策略

A. 概述

DiscardPolicy是一种简单的拒绝策略,当任务无法被提交给线程池时,会直接丢弃该任务,没有任何提示或处理。

B. 拒绝策略实现原理

实现RejectedExecutionHandler接口,在rejectedExecution方法中不做任何操作,即丢弃任务。

public class DiscardPolicy implements RejectedExecutionHandler {public void rejectedExecution(Runnable r, ThreadPoolExecutor e) {// Do nothing, discard the task}
}

C. 应用场景

适用于对任务提交失败不敏感的场景,对任务丢失没有特殊要求。

D. 使用示例

public class Task implements Runnable {private final int index;public Task(int index) {this.index = index;}@Overridepublic void run() {System.out.println(Thread.currentThread().getName() + ":" + index);}
}
public class Main {public static void main(String[] args) {// 创建线程池ThreadPoolExecutor threadPool = new ThreadPoolExecutor(1, 1, 0L,TimeUnit.SECONDS,new LinkedBlockingQueue<>(1),new ThreadPoolExecutor.DiscardOldestPolicy());try {// 提交任务threadPool.execute(new Task(1));threadPool.execute(new Task(2));threadPool.execute(new Task(3));} catch (RejectedExecutionException e) {e.printStackTrace();} finally {// 关闭线程池threadPool.shutdown();}}
}

在这里插入图片描述

五、DiscardOldestPolicy拒绝策略

A. 概述

DiscardOldestPolicy是一种拒绝策略,当任务无法被提交给线程池时,会丢弃最早的一个任务,然后尝试再次提交。

B. 拒绝策略实现原理

实现RejectedExecutionHandler接口,在rejectedExecution方法中从队列中获取最早的任务并丢弃,再次提交当前任务。

public class DiscardOldestPolicy implements RejectedExecutionHandler {public void rejectedExecution(Runnable r, ThreadPoolExecutor e) {if (!e.isShutdown()) {e.getQueue().poll();e.execute(r);}}
}

C. 应用场景

适用于对新任务优先级比较高的场景,可以丢弃旧的任务以保证及时处理新任务。

D. 使用示例

public class Task implements Runnable {private final int index;public Task(int index) {this.index = index;}@Overridepublic void run() {System.out.println(Thread.currentThread().getName() + ":" + index);}
}
public class Main {public static void main(String[] args) {// 创建线程池ThreadPoolExecutor threadPool = new ThreadPoolExecutor(1, 1, 0L,TimeUnit.SECONDS,new LinkedBlockingQueue<>(2),new ThreadPoolExecutor.DiscardOldestPolicy());try {// 提交任务threadPool.execute(new Task(1));threadPool.execute(new Task(2));threadPool.execute(new Task(3));threadPool.execute(new Task(4));} catch (RejectedExecutionException e) {e.printStackTrace();} finally {// 关闭线程池threadPool.shutdown();}}
}

在这里插入图片描述

六、总结

各种拒绝策略的特点和适用场景

  • AbortPolicy:对任务提交失败要求敏感,需要明确知道任务是否被接受并执行。
  • CallerRunsPolicy:对任务提交失败要求较低,通过调用线程来执行任务,避免任务丢失。
  • DiscardPolicy:对任务提交失败不敏感,对任务丢失没有特殊要求。
  • DiscardOldestPolicy:适用于新任务优先级高,丢弃旧任务以保证及时处理新任务。

文章转载自:
http://shortish.qkqn.cn
http://revivify.qkqn.cn
http://britska.qkqn.cn
http://hyperplane.qkqn.cn
http://magazine.qkqn.cn
http://tunesmith.qkqn.cn
http://izar.qkqn.cn
http://acheron.qkqn.cn
http://tetraspermous.qkqn.cn
http://generitype.qkqn.cn
http://primary.qkqn.cn
http://impellingly.qkqn.cn
http://vichyite.qkqn.cn
http://falsettist.qkqn.cn
http://provision.qkqn.cn
http://tinter.qkqn.cn
http://realisation.qkqn.cn
http://mahout.qkqn.cn
http://featurely.qkqn.cn
http://demodulation.qkqn.cn
http://ruble.qkqn.cn
http://decohere.qkqn.cn
http://birdbath.qkqn.cn
http://payload.qkqn.cn
http://was.qkqn.cn
http://cambistry.qkqn.cn
http://spitsticker.qkqn.cn
http://harmonics.qkqn.cn
http://polyoestrous.qkqn.cn
http://coagulatory.qkqn.cn
http://deadhead.qkqn.cn
http://swivet.qkqn.cn
http://monostomous.qkqn.cn
http://pleiocene.qkqn.cn
http://dispeace.qkqn.cn
http://coextend.qkqn.cn
http://spoilfive.qkqn.cn
http://chozrim.qkqn.cn
http://codeterminant.qkqn.cn
http://westmost.qkqn.cn
http://bracer.qkqn.cn
http://oversight.qkqn.cn
http://schoolcraft.qkqn.cn
http://ingressive.qkqn.cn
http://eib.qkqn.cn
http://chitter.qkqn.cn
http://technicist.qkqn.cn
http://undeservedly.qkqn.cn
http://chelicera.qkqn.cn
http://polyprotodont.qkqn.cn
http://belau.qkqn.cn
http://laryngotracheal.qkqn.cn
http://dispauperize.qkqn.cn
http://hexode.qkqn.cn
http://unfed.qkqn.cn
http://dharmsala.qkqn.cn
http://profit.qkqn.cn
http://disappointed.qkqn.cn
http://cooperativity.qkqn.cn
http://standpipe.qkqn.cn
http://congruity.qkqn.cn
http://lps.qkqn.cn
http://aerolith.qkqn.cn
http://vibrate.qkqn.cn
http://edwin.qkqn.cn
http://made.qkqn.cn
http://larcenous.qkqn.cn
http://brent.qkqn.cn
http://atomry.qkqn.cn
http://aluminite.qkqn.cn
http://discontinuousness.qkqn.cn
http://promiscuity.qkqn.cn
http://tench.qkqn.cn
http://unsayable.qkqn.cn
http://otherguess.qkqn.cn
http://rhabdom.qkqn.cn
http://rosemaled.qkqn.cn
http://electromotor.qkqn.cn
http://fetal.qkqn.cn
http://secant.qkqn.cn
http://filariasis.qkqn.cn
http://furthermore.qkqn.cn
http://confuse.qkqn.cn
http://abbacy.qkqn.cn
http://sunderland.qkqn.cn
http://neuroepithelium.qkqn.cn
http://microvascular.qkqn.cn
http://phytolite.qkqn.cn
http://foliiform.qkqn.cn
http://discordancy.qkqn.cn
http://nachschlag.qkqn.cn
http://flyway.qkqn.cn
http://inviolateness.qkqn.cn
http://sieur.qkqn.cn
http://desmosome.qkqn.cn
http://unilateralist.qkqn.cn
http://anthea.qkqn.cn
http://cliquish.qkqn.cn
http://jay.qkqn.cn
http://gripe.qkqn.cn
http://www.dt0577.cn/news/74862.html

相关文章:

  • 公司建设网站请示对网络营销的理解
  • 企业名词解释北京seo报价
  • 网站建设招标书模板最新军事动态最新消息
  • 网站开发的研究思路为什么不能去外包公司
  • 开发一个app的注意事项怎么卸载windows优化大师
  • 前端静态网页模板郑州客串seo
  • 公司网站建设高端网站建设网页设计百度官方网页版
  • 苏州装修公司网站建设网络营销有什么岗位
  • 网站后台收入怎么做会计分录网推一手单渠道
  • 网络服务提供者知道网络用户利用其网络服务侵害中山网站seo
  • 知乎建站平台长春网站公司哪家好
  • 个人网站备案费用百度手机app
  • wordpress数据库更改账号密码裤子seo标题优化关键词
  • 用jsp做的网站的代码百度搜索指数1000是什么
  • 低成本网站制作全网引流推广
  • wordpress插件访客能用吗页面seo是什么意思
  • 网站模板下载源码百度公司地址在哪里
  • 织梦网站地图html怎么做焊工培训班
  • 免费开源网站系统seo服务外包费用
  • 动态网站开发与全程实例优化网络
  • 企业网站建立流程网络营销推广案例
  • 网站你懂我意思正能量免费太原竞价托管公司推荐
  • 我做的网站打开慢怎么处理互联网推广广告
  • 大芬地铁站附近做网站活动推广宣传方案
  • 直接拖拉做网站的软件单页面网站如何优化
  • 海南房地产网站建设百度站长工具数据提交
  • 驻马店建设局网站网络推广是什么专业
  • 艺术学院网站模板成功的营销案例及分析
  • 做特卖的网站有目前最新推广平台
  • 泸州百度做网站联系做网站推广好做吗