首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java并发设计模式.

本文主要讲解几种常见并行模式, 具体目录结构如下图. ? 单例 单例是最常见的一种设计模式, 一般用于全局对象管理, 比如xml配置读写之类的. 一般分为懒汉式, 饿汉式....至于为什么要volatile关键字, 主要涉及到jdk指令重排, 详见之前的博文: Java内存模型与指令重排 懒汉式: 使用静态内部类 1 public class Singleton { 2...生产者-消费者模式是一个经典的多线程设计模式....一般使用BlockingQueue作为数据缓冲队列, 他是通过锁和阻塞来实现数据之间的同步,  如果对缓冲队列有性能要求, 则可以使用基于CAS无锁设计的ConcurrentLinkedQueue....我们主要讲两个场景, Master-Worker模式, ForkJoin线程池. Master-Worker模式模式核心思想是系统由两类进行协助工作: Master进程, Worker进程.

53010

Java并发设计模式

单例 单例是最常见的一种设计模式, 一般用于全局对象管理, 比如xml配置读写之类的. 一般分为懒汉式, 饿汉式....至于为什么要volatile关键字, 主要涉及到jdk指令重排, 详见之前的博文: Java内存模型与指令重排 懒汉式: 使用静态内部类 1 public class Singleton { 2...生产者-消费者模式是一个经典的多线程设计模式....一般使用BlockingQueue作为数据缓冲队列, 他是通过锁和阻塞来实现数据之间的同步, 如果对缓冲队列有性能要求, 则可以使用基于CAS无锁设计的ConcurrentLinkedQueue....我们主要讲两个场景, Master-Worker模式, ForkJoin线程池. Master-Worker模式模式核心思想是系统由两类进行协助工作: Master进程, Worker进程.

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

    Java并发设计模式设计思想

    单例 单例是最常见的一种设计模式, 一般用于全局对象管理, 比如xml配置读写之类的. 一般分为懒汉式, 饿汉式....至于为什么要volatile关键字, 主要涉及到jdk指令重排, 详见之前的博文: Java内存模型与指令重排 懒汉式: 使用静态内部类 public class Singleton { private...生产者-消费者模式是一个经典的多线程设计模式....一般使用BlockingQueue作为数据缓冲队列, 他是通过锁和阻塞来实现数据之间的同步, 如果对缓冲队列有性能要求, 则可以使用基于CAS无锁设计的ConcurrentLinkedQueue....我们主要讲两个场景, Master-Worker模式, ForkJoin线程池. Master-Worker模式模式核心思想是系统由两类进行协助工作: Master进程, Worker进程.

    39400

    Java并发设计模式:Copy-On-Write-写时复制并发策略

    并发编程设计中,我们对写时复制操作加锁,而读数据不会加锁,提高了并发。读虽然不加锁,数组的引用能保证可见性,但只能 保证数据的最终一致性,不能保证数据元素的实时一致性。...java中的写时复制实现:CopyOnWriteArrayList、CopyOnWriteArraySet ---- CopyOnWriteArrayList的底层容器,需要声明为volatile,提供并发可见性...深度复制数组采用了方法: java.util.Arrays#copyOf(T[], int) 而且为添加的数据保留了最后的位置。 然后在复制的数组上追加需要添加的数据。...2、CopyOnWriteArrayList读操作不加锁 CopyOnWriteArrayList读取操作时,由volatile保证内存可见性,我们以 java.util.concurrent.CopyOnWriteArrayList...凡是读取操作,首先临时快照原数组数据(通过临时引用指向原数组引用的内存地址),而且读取操作不用加锁; 4、迭代器不能支持修改数据操作,在临时快照的数据上修改是无意义的; Copy-On-Write-写时复制并发

    25910

    并发组件 | Go设计模式实战

    嗯,Go设计模式实战系列,一个设计模式业务真实使用的golang系列。 前言 本系列主要分享,如何在我们的真实业务场景中使用设计模式。 本系列文章主要采用如下结构: 什么是「XX设计模式」?...什么真实业务场景可以使用「XX设计模式」? 怎么用「XX设计模式」? 本文主要介绍「组合模式」结合Go语言天生的并发特性,如何在真实业务场景中使用。...之前文章《代码组件 | Go设计模式实战》已经介绍了「组合模式」的概念,以及在业务中的使用。今天我们结合Go语言天生的并发特性,升级「组合模式」为「并发组合模式」。...我们先来简单回顾下「组合模式」的知识,详细可以查看上篇文章《代码组件 | Go设计模式实战》 什么是「并发组合模式」?...结语 「并发组合模式」是一个由特定的设计模式结合Go语言天生的并发特性,通过适当封装形成的“新模式”。

    81730

    java设计模式之工厂模式设计模式

    工厂模式: 这里用百度百科的词条来解释: 工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式。...著名的Jive论坛 ,就大量使用了工厂模式,工厂模式Java程序系统可以说是随处可见。因为工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象。...在我们java生态中,spring对工厂模式运用的可算是极致了,顶级类BeanFactory是bean的最顶级的工厂类... 在这里,我模拟一下工厂模式: 先说一下工厂模式需要的角色: 机器?...试想,天下的面条种类那么多,工厂模式是非常容易扩展的,实现思路即java的“多态” 这里,就已经实现了一个简单的工厂模式,即简单工厂模式 当你的宝马机器生产宝马的时候,这个时候只需要拓展Machine类即可...machine = new BMWMachine(); System.out.println(machine.create(new Object())); } 这就是java

    84940

    并发编程 - Event Bus 设计模式

    ---- 设计 Bus接口对外提供了几种主要的使用方式,比如post方法用来发送Event register方法用来注册Event接收者(Subscriber)接受响应事件 EventBus采用同步的方式推送...Executor是使用JDK中的Executor接口,自定义的ThreadPool天生就是多线程并发执行任务的线程池,自带异步处理能力,但是无法做到同步任务处理,因此我们使用Executor可以任意扩展同步...,所设计的EventBus对Subscriber没有做任何限制,但是要接受event的回调则需要将方法使用注解@Subscribe进行标记(可指定topic),同一个Subscriber的不同方法通过@...", "AIGC")), "test"); TimeUnit.SECONDS.sleep(20); } } 小结 EventBus有点类似于GOF设计模式中的监听者模式,...在EventBus的设计中有三个非常重要的角色(Bus、Registry和Dispatcher), Bus主要提供给外部使用的操作方法, Registry注册表用来整理记录所有注册在EventBus上的

    21820

    Java并发编程详解》第19章:Future设计模式

    简介 假设有个任务需要执行比较长的的时间,通常需要等待任务执行结束或者出错才能返回结果,在此期间调用者只能陷人阻塞苦苦等待,对此,Future设计模式提供了一种凭据式的解决方案。...在本章中,我们将通过程序的方式实现Future设计模式,让读者体会这种设计的好处。...自JDK1.5起,Java提供了比较强大的Future接口,在JDK1.8时更是引人了CompletableFuture,其结合函数式接口可实现更强大的功能,由于本书不涉及讨论并发包的知识点,读者可自行查阅...Future设计模式实现 图19-1是Future设计模式所涉及的关键接口和它们之间的关系UML图,其中FutureTest用于测试。 image.png 接口定义 1....至此,Future 模式设计已讲解完毕,虽然我们提交任务时不会进入任何阻塞,但是当调用者需要获取结果的时候,还是有可能陷人阻塞直到任务完成,其实这个问题不仅在我们设计的Future中有,在JDK 1.5

    85851

    java设计模式(4)-原型设计模式

    这篇推文学习创建型模式最后一种-原型模式,该模式的思想是将一个对象作为原型,对其进行复制、克隆,产生一个和原对象类似的新对象,以便使用 首先需要了解对象深、浅复制的概念: 浅拷贝:将一个对象复制后,基本数据类型的变量都会重新创建...所有的Java类都继承至Object,而Object类提供了一个clone()方法,该方法可以将一个java对象复制一份,因此在java中可以直接使用clone()方法来复制一个对象。...异常 Java中任何实现了Cloneable接口的类都可以通过调用clone()方法来复制一份自身然后传给调用者。...如果系统要保存对象的状态,而对象的状态变化很小,或者对象本身占内存不大的时候,也可以使用原型模式配合备忘录模式来应用。...相反,如果对象的状态变化很大,或者对象占用的内存很大,那么采用状态模式会比原型模式更好。

    47650

    Java设计模式

    本文链接:https://blog.csdn.net/github_39655029/article/details/82736019 设计模式基础 设计模式主要基于的面向对象设计的原则:...结构模式:涉及类和对象组成,继承概念用于组成接口并定义方法组合对象以获得新功能; 行为模式:侧重于对象之间的通信; J2EE模式设计表示层,由Sun Java Center标识; 创造设计模式...,可直接访问而不需要实例化类对象; 原型模式 涉及实现一个原型接口,只创建当前对象的克隆; Builder模式 构造器逐步构建最终对象,此构造器独立于其他对象; 结构设计模式 适配器...:表示层代码可以是JSP,servlet或UI java代码; 业务代理:为客户端实体提供对业务服务方法的访问的单入口点类; 查找服务:负责获得相关业务的实施和提供业务的委托对象业务对性爱难过的访问;...NULL对象类,不提供此类的任何实现,且无需检查空值; MVC模式 模型:表示携带数据对象或JAVA POJO,若其数据改变也可以具有逻辑来更新控制器; 视图:表示模型包含的数据的可视化层; 控制器

    1K10

    java设计模式

    设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。...一、设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。...行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 其实还有两类:并发模式和线程池模式。...三、Java中具体的设计模式 1.简单工厂模式(Simple Factory) 根据提供给它的参数,返回的是几个可能产品中的一个类的实例。 ?...在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在。

    980120

    Java 设计模式 工厂模式

    1.简单工厂模式(Simple Factory Pattern)            举个例子吧,我现在想要一个 iPhone 品牌 的手机 ,现有一个生产手机的的工厂,我们要告诉工厂,“我要一个iPhone...produce it."); 80 } 81 return null; 82 } 83 }        上面的创建的工厂,这就是所谓的 简单工厂模式...上面的描述便是 工厂方法模式(Factory Method Pattern)。              ...工厂方法模式 扩展性非常好,但是拓展性带来了一个新的问题,拓展性增加了我们系统里类的数量和规模,这使我们的系统异常庞大! 只要有新的生产要求提出,都会有新的方法添加。...抽象工厂模式              举个实际的例子,IPhone 现在 5S 刚出来,我现在要工厂给我造出来,那工厂自然提供一个部门给我造,那以后IPhone 的后续还会推出各种新的 款式.....

    44530

    Java设计模式-代理模式

    作者:Jet啟思 链接:https://juejin.im/post/5a1e7ae16fb9a0451170e446 一、代理模式 定义 为其它对象提供一个代理对象,并由代理对象控制这个对象的访问。...代理模式UML图 这是代理模式的通用UML,涉及到的角色如下所示: - 抽象主题角色:定义了被代理角色和代理角色的共同接口或者抽象类。...- 代理角色:实现或者继承抽象主题角色,持有被代理角色的引用,控制和限制被代理角色的实现,并且拥有自己的处理方法(预处理和善后) 二、代理模式实战 首先是抽象主题角色: public interface...下面看代理模式的另一种实现方式,先看抽象主题角色代码: public interface Subject { public void movie(); // 指定代理 public...但是,无论是哪一种方式,代理模式的实现都是必须经过代理才能访问被代理模式。就比如明星拍电影,不会跳过经纪人直接找到明星,而是经过经纪人再到明星,要不然经纪人这个职位岂不是浪费了。

    95890
    领券