首页
学习
活动
专区
圈层
工具
发布

java 线程池设计模式

java 线程池采用的是 Thread Pool 线程池模式。 线程池设计模式主要解决在资源有限的情况下为每一个任务创建一个线程执行消耗资源很不现实。...线程池的设计思路 采用保存并管理一定数量的线程,用这些线程去执行不断产生的任务。 主要的类: ThreadPool 负责接收和存储任务以及线程生命周期的管理。...进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。...,并调用RejectedExecutionHandler.rejectedExecution() 线程池参数的合理设计 corePoolSize 核心线程数是与每一个任务的执行时间和每一秒产生的任务数量来确定...加锁的原因是我们在自己设计的简单线程池中List 是线程安全的,而线程池源码中,Runnbale使用 HashSet进行存储是线程不安全的,所以需要加锁。

2K40
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Java设计模式——线程安全的单件模式

    单件模式,也称单例模式,用以创建独一无二的、只能有一个实例的对象。   单件模式的类图是所有模式的类图中最简单的——只有一个类。...尽管从类设计的视角来看单件模式很简单,但是实现上还是会遇到一些问题,本文着重对这一点来进行分析解决。   ...看起来这已经是单件模式的全部了,因为单件模式太简单了,但是如果细细追究,还有很多问题。   想一个问题,如果有两个或者更多的线程调用使用上述的单例的类,会怎么样呢?   ...,要先等候别的线程离开该方法。...4,、今天再更新一种方法,结合以上的三种方法的优点,既能拥有单件模式延迟实例化的优点,又能保证性能的要求,同时也避免了多线程情况下出错。

    80110

    多线程设计模式解读2—Promise(承诺)模式

    上次我们讲到多线程设计模式的Guarded Suspension(保护性暂挂模式),Guarded Suspension是条件未满足时线程一直处于等待状态,直到条件满足才继续运行,而在Promise模式中...,Promise的getResult方法获取异步任务结果,如果任务未执行完毕,就一直处于等待状态,可以说,Promise模式是Guarded Suspension模式的一个应用实例,它有两个重要角色:Promise...初始化长时计算器 Future calculatorPromise = Calulator.newInstance(); System.out.println("模拟主线程任务执行开始......"); System.out.println("模拟主线程任务执行结束...")...return futureTask; } } 这里FutureTask就是Promise角色,主要用于包装异步任务处理结果,而Calculator是Promisor角色,我们可以看到,Promise模式屏蔽了同步和异步编程的差异

    78530

    盘点java线程池中的设计模式

    说起线程池,大家可能都比较熟悉,但是里面的源码又知多少呢?...不慌,五哥带你去翻翻源码 本篇文章会对线程池的源码进行跳跃式的代码和分析,不清楚的可以翻到源码位置并对照文章进行对比: 策略模式 在新创建一个线程池的时候,会在构造方法传入一个拒绝的策略,jdk内部封装了几个常用的拒绝策略...) 2023行 当然用户还可以手动去实现RejectedExecutionHandler 开发自己的拒绝策略 装饰器模式 在使用到Executors类的时候,用到了newSingleThreadExecutor...1,0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue(), threadFactory)); } 在这里,jdk在创建单个线程池的时候用到了装饰器模式...,原因是因为如果用ThreadPoolExecutor类,则用户可以手动修改核心线程的个数,这样就违背了单线程池的初衷,因此将ThreadPoolExecutor类装饰起来,取消掉setCoreSize

    2K30

    Java多线程设计模式:waitnotify机制

    通常,多线程之间需要协调工作。例如,浏览器的一个显示图片的线程displayThread想要执行显示图片的任务,必须等待下载线程 downloadThread将该图片下载完毕。...condition) { obj.wait(); } obj.doSomething(); }   当线程A获得了obj锁后,发现条件condition不满足,无法继续下一处理,于是线程A就wait...在另一线程B中,如果B更改了某些条件,使得线程A的condition条件满足了,就可以唤醒线程A: synchronized(obj) { condition = true; obj.notify(...◆调用obj.wait()后,线程A就释放了obj的锁,否则线程B无法获得obj锁,也就无法在synchronized(obj) {…} 代码段内唤醒A。   ...◆当obj.wait()方法返回后,线程A需要再次获得obj锁,才能继续执行。

    30820

    Arch - 多线程设计架构模式

    图片 概述 多线程设计架构模式是一种通过合理地使用线程来提高系统性能和响应能力的设计模式。...以下是一些常见的多线程设计架构模式: 线程池模式:通过预先创建一组线程,将任务提交到线程池中执行,避免了线程的频繁创建和销毁,提高了系统的性能和稳定性。...生产者-消费者模式:通过将任务分为生产者和消费者两个角色,生产者负责生成任务并将其放入队列中,而消费者则从队列中获取任务并执行。这种模式可以提高系统的并发性能和吞吐量。...Future模式:通过使用Future对象来表示异步计算的结果,可以让调用方在不阻塞的情况下获取到计算结果。这种模式可以提高系统的响应能力和吞吐量。...以上是一些常见的多线程设计架构模式,Java中也提供了丰富的API支持,可以帮助我们更好地实现这些模式。 ---- 细节

    28230

    多线程设计模式解读4—Producer-Consumer模式

    Producer-Consumer模式可以说是多线程设计模式之王,后期我们要讲的许多模式像Thread-Pool模式,Active Object模式等都是Producer-Consumer模式的变种。...Producer-Consumer模式中的生产者和消费者阻塞唤醒机制可以通过Guarded Suspension模式实现。 为什么要有Producer-Consumer模式呢?...2、实现线程间的协调运行。生产者与消费者之间的运行速率不同,直接调用,数据处理会产生延迟,导致程序响应性下降。...3、线程停止 消费者线程和生产者线程哪个先停止,一般是先停止生产者,等Channel剩余Product备份后,或者被消费者处理完后,再停止消费者。...至于具体实现,我们可以采用Two-phase termination 模式,设置停止标志并且使用中断;如果你使用线程池管理,则可以调用shutdown方法,它会等队列中的所有任务完成再关闭(shuwdownNow

    1.3K40

    Java 多线程设计模式 —— Single Threaded Execution

    表示 临界区 内的代码同一时间内只允许一个线程执行,这个模式是并发编程的基础,对应 Java 中也就是同步代码块 synchronized,或其他显式锁 lock。...使用场景 多线程环境 多个线程同时访问的共享资源 这些线程会改变共享资源。 示例 现有票 100 张,分三个窗口售卖,卖完为止。...else { System.out.println("票已卖完"); } } } 类图 image.png 时序图 image.png 总结 单线程的情况...,不需要使用此模式,就好像一个人在家上厕所,不需要锁门一样。...只有当 多线程 同时对 同一个共享资源,在线程中 进行了修改,才需要使用此模式。 且需要注意,对于 共享资源,如果用到了此模式,要保证所有使用他的地方都进行了保护。不然等于你把门锁住了,但窗子没关。

    78130

    并发设计模式实战系列(4):线程池

    今天为大家带来的是并发设计模式实战系列,第四章线程池(Thread Pool)​,废话不多说直接开始~ 一、核心原理深度拆解 1....任务调度策略:核心线程常驻,队列满时扩容,最大线程满时触发拒绝策略 2...." + t.getName() + "发生异常: " + e); }); 六、设计模式对比 模式 资源利用率 响应速度 系统稳定性 实现复杂度 Thread-Per-Message 低 高 低 简单 Worker...防雪崩机制 // 断路器模式集成 CircuitBreaker breaker = CircuitBreaker.ofDefaults("biz"); pool.submit(() -> {...建议重点关注以下三个层面: 参数动态化:根据实时监控数据自动调整线程池参数 可观测性:集成Prometheus+Grafana实现线程池指标可视化 模式组合:结合熔断/限流/降级等模式构建弹性系统 最后切记

    30010

    day19-线程之间的通信&线程池&设计模式

    day19_线程之间的通信&线程池&设计模式 课程目标 1. 【理解】线程通信概念 2. 【理解】等待唤醒机制 3. 【理解】线程池运行原理 4. 【理解】voliate关键字 5....【掌握】单例设计模式 线程之间通信 什么是线程之间的通信 **概念:**多个线程在处理同一个资源,但是处理的动作(线程的任务)却不相同。...简单一句话:设计模式就是经验的总结 创建型模式:简单工厂模式,工厂方法模式,抽象工厂模式,建造者模式,原型模式,单例模式。...(10个 什么是单例设计模式 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。...装饰设计模式: 增强原有对象的功能 原本有一个对象,但是这个对象的功能不够强,采用装饰设计模式,对原对象中功能进行增强 回想一下我们当时讲的缓冲流,其实就是装饰设计模式 public class Phone

    26810

    多线程设计模式解读5—Immutable Object(不可变对象)模式

    前面讲了Producer-Consumer模式,它有许多变种,我们以后会讲。...我们将接着了解另外一种分支的设计模式,前面所讲的所有的模式,都是要用到锁的,而锁是会带来一些额外的开销和问题的,那么能不能不通过锁,实现多线程环境下的线程安全呢?...其中一个思路就是通过Immutable Object(不可变对象)模式。它使用对外可见的不可变对象,天生具有线程安全的“基因”。...因为与多线程的原子性、可见性相关的问题(如失效数据、丢失更新操作、对象处于不一致状态等)都与多线程试图同时访问同一个可变状态相关,若对象状态不可变,那这些问题也就不存在了。...它不需要加锁就可以排除并发线程之间的干扰。迭代器不会抛出ConcurrentModificationException。自迭代器创建后,迭代器无需考虑后期修改操作带来的影响。

    80530

    『设计模式』设计模式--策略模式

    朋友觉得我为了几块钱这么墨迹,付完钱拉着我就走了,问我:“你说的什么模式怎么回事?” 我说超市收银系统就是很好的策略系统,就是一个典型策略模式。 多收了2块5,心疼死我了,我慢慢给你讲! ?...策略模式 策略模式的用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。...策略模式相当于"可插入式(Pluggable)的算法"。 在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。...策略模式和简单工厂模式的结合:把分支判断放到环境角色中。...模式讲解 策略模式功能:把具体算法从具体业务处理中独立 策略模式与if-else语句:多个if-else出现考虑使用策略模式 算法的平等性:策略算法是形同行为的不同实现 谁来选择具体策略算法:客户端

    2.4K20

    c 线程安全的单例模式-设计模式之单例模式(C++版)

    什么是单例模式?   单例模式是为确保一个类只有一个实例,并为整个系统提供一个全局访问点的一种模式方法。   单例特点:   1 在任何情况下,单例类永远只有一个实例存在。   ...,可是多线程下就有问题了。   ...分析:   1 线程A进入函数执行判断语句,这句执行后就挂起了,这时线程A已经认为为NULL,但是线程A还没有创建对象。   ...2 又有一个线程B进入函数执行判断语句,此时同样认为变量为null,因为A没有创建对象。线程B继续执行,创建了一个对象。   3 稍后,线程A接着执行,也创建了一个新的对象。   ...不然,我们就开始同步线程。第二个条件是说,如果被同步的线程中,有一个线程创建了对象,那么别的线程就不用再创建了。

    1.1K20

    设计模式 -- 常用设计模式

    设计模式介绍 设计模式分类 设计模式6大原则 1.设计模式介绍 设计模式(Design Patterns)                                   ——可复用面向对象软件的基础...设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。...使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。...设计模式分类 经典的《设计模式》一书归纳出23种设计模式,这23种模式又可归为,创建型、结构型和行为型3大类 2.1.创建型模式 前面讲过,社会化的分工越来越细,自然在软件设计方面也是如此,因此对象的创建和对象的使用分开也就成为了必然趋势...工厂模式 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

    2.5K23

    多线程设计模式解读1—Guarded Suspension(保护性暂挂模式)

    大家好,今天我们给大家介绍一个多线程设计模式的一个概念,我们平时业务代码写得比较多,因此,如果刚上手写比较复杂多线程代码,很有可能会埋下一些坑,而这些坑一时之间都是很难发现,需要经过严格测试,甚至上线运行之后才会在生产环境显现出来...大家应该听过面向对象编程的23种设计模式吧,它就是在特定场景下提供针对某一问题的可复用解决方案,而多线程设计模式是在多线程编程领域的设计模式。...今天给大家介绍其中一个设计模式:Guarded Suspension(保护性暂挂模式)。...另外,一个内置锁只能有一个相关联的条件队列,多个线程可能在同一个条件队列上等待不同的保护条件,并且在最常见的加锁模式下公开条件队列对象,这使得我们notifyAll时无法满足所有等待线程为同一类型的需求...参考资料: 《java多线程编程实战指南—设计模式篇》 《图解多线程设计模式》 《java并发编程实战》

    1.1K40
    领券