iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >java线程池工作队列饱和策略代码示例
  • 310
分享到

java线程池工作队列饱和策略代码示例

java线程池队列 2023-05-30 20:05:14 310人浏览 八月长安
摘要

线程池(Thread Pool) 是并行执行任务收集的实用工具。随着 CPU 引入适合于应用程序并行化的多核体系结构,线程池的作用正日益显现。通过 ThreadPoolExecutor类及其他辅助类,Java 5 引入了这一框架,作为新的并

线程池(Thread Pool) 是并行执行任务收集的实用工具。随着 CPU 引入适合于应用程序并行化的多核体系结构,线程池的作用正日益显现。通过 ThreadPoolExecutor类及其他辅助类,Java 5 引入了这一框架,作为新的并发支持部分。

ThreadPoolExecutor框架灵活且功能强大,它支持特定于用户的配置并提供了相关的挂钩(hook)和饱和策略来处理满队列

Java线程池会将提交的任务先置于工作队列中,在从工作队列中获取(SynchronousQueue直接由生产者提交给工作线程)。那么工作队列就有两种实现策略:无界队列和有界队列。无界队列不存在饱和的问题,但是其问题是当请求持续高负载的话,任务会无脑的加入工作队列,那么很可能导致内存等资源溢出或者耗尽。而有界队列不会带来高负载导致的内存耗尽的问题,但是有引发工作队列已满情况下,新提交的任务如何管理的难题,这就是线程池工作队列饱和策略要解决的问题。

饱和策略分为:Abort 策略, CallerRuns 策略,Discard策略,DiscardOlds策略。

为了更好的理解,我编写一个小的例子。

package concurrency.pool;import java.util.concurrent.LinkedBlockingDeque;import java.util.concurrent.RejectedExecutionHandler;import java.util.concurrent.ThreadPoolExecutor;import java.util.concurrent.TimeUnit;public class SaturationPolicy {public static void policy(RejectedExecutionHandler handler){//基本线程2个,最大线程数为3,工作队列容量为5ThreadPoolExecutor exec = new ThreadPoolExecutor(2,3,0l, TimeUnit.MILLISECONDS,new LinkedBlockingDeque<>(5));if (handler != null){exec.setRejectedExecutionHandler(handler);//设置饱和策略}for (int i = 0; i < 10; i++) {exec.submit(new Task());//提交任务}exec.shutdown();}public static void main(String[] args) {//    policy(new ThreadPoolExecutor.AbortPolicy());//    policy((new ThreadPoolExecutor.CallerRunsPolicy()));//    policy(new ThreadPoolExecutor.DiscardPolicy());//    policy(new ThreadPoolExecutor.DiscardOldestPolicy());}//自定义任务static class Task implements Runnable {private static int count = 0;private int id = 0;//任务标识public Task() {id = ++count;}@Override    public void run() {try {TimeUnit.SECONDS.sleep(3);//休眠3秒}catch (InterruptedException e) {System.err.println("线程被中断" + e.getMessage());}System.out.println(" 任务:" + id + "\t 工作线程: "+ Thread.currentThread().getName() + " 执行完毕");}}}

--结束END--

本文标题: java线程池工作队列饱和策略代码示例

本文链接: https://www.lsjlt.com/news/221110.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • java线程池工作队列饱和策略代码示例
    线程池(Thread Pool) 是并行执行任务收集的实用工具。随着 CPU 引入适合于应用程序并行化的多核体系结构,线程池的作用正日益显现。通过 ThreadPoolExecutor类及其他辅助类,Java 5 引入了这一框架,作为新的并...
    99+
    2023-05-30
    java 线程池 队列
  • java线程池ThreadPoolExecutor的八种拒绝策略示例详解
    目录池化设计思想线程池触发拒绝策略的时机JDK内置4种线程池拒绝策略拒绝策略接口定义CallerRunsPolicy(调用者运行策略)AbortPolicy(中止策略)Discard...
    99+
    2024-04-02
  • 手把手带你理解java线程池之工作队列workQueue
    目录ArrayBlockingQueueSynchronousQueueLinkedBlockingDequeLinkedBlockingQueueDelayDequeLinkedT...
    99+
    2024-04-02
  • Java实现线程插队的示例代码
    目录多线程5(线程插队)1.题目2.解题思路3.代码详解多线程5(线程插队) 1.题目 在编写多线程的业务时,会遇到让一个线程优先于其他线程运行的情况,除了可以设置线程的优先级高于其...
    99+
    2024-04-02
  • python中队列基本操作和多线程队列的示例分析
    这篇文章给大家分享的是有关python中队列基本操作和多线程队列的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、队列基本操作from queue import Queue...
    99+
    2023-06-29
  • Java实现手写一个线程池的示例代码
    目录概述线程池框架设计代码实现阻塞队列的实现线程池消费端实现获取任务超时设计拒绝策略设计概述 线程池技术想必大家都不陌生把,相信在平时的工作中没有少用,而且这也是面试频率非常高的一个...
    99+
    2022-11-13
    Java手写线程池 Java线程池
  • Java实现手写乞丐版线程池的示例代码
    目录前言线程池的具体实现线程池实现思路线程池实现代码线程池测试代码杂谈总结前言 在上篇文章线程池的前世今生当中我们介绍了实现线程池的原理,在这篇文章当中我们主要介绍实现一个非常简易版...
    99+
    2022-11-13
    Java手写线程池 Java线程池
  • Java多线程之多种锁和阻塞队列的示例分析
    这篇文章给大家分享的是有关Java多线程之多种锁和阻塞队列的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、悲观锁和乐观锁1.1. 乐观锁顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以...
    99+
    2023-06-15
  • java多线程编程同步器Future和FutureTask解析及代码示例
    publicinterfaceFuture<V>Future表示异步计算的结果。它提供了检查计算是否完成的方法,以等待计算的完成,并获取计算的结果。计算完成后只能使用get方法来获取结果,如有必要,计算完成前可以阻塞此方法。取消...
    99+
    2023-05-30
    java 多线程 ava
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作