并发设计模式
并发设计模式实战
橙子AQA
这个作者很懒,什么都没留下…
展开
-
策略模式
Thread类与Runnable接口 Thread类定制了线程实现框架。具体的实现细节有Runnable接口实现Thread类中的run方法public void run(){ if(target != null){ target.run(); }}这里run方法是一个空的实现,具体实现交由Runnable接口实现...原创 2020-02-09 09:07:08 · 66 阅读 · 0 评论 -
Single Thread Execution设计模式
同一个时刻只能有一个线程访问共享资源,以牺牲性能为代价的使用Synchronized修饰访问资源或者使用Lockpublic class FlightSecurity{ private int count = 0; //登机牌 private String boardingPass = null; private String idCard = nul...原创 2020-02-07 10:55:45 · 124 阅读 · 0 评论 -
读写分离设计
适用于读多于写的情况public interface Lock {//获取显示锁,未能获取线程将堵塞void lock() throws InterruptedException;//释放获取的锁 减少read或者write的数量void unlock();}public interface ReadWriteLock {/**** 读的数量大于0...原创 2020-02-07 10:55:58 · 170 阅读 · 0 评论 -
不可变对象设计模式
不给外部修改共享资源的机会,每次都返回一个新的对象。例如:String,StreamActor模型:https://en.wikipedia.org/wiki/Actor_modelpublic final class IntegerAccumulator{ private final int init; public IntegerAccumulator(i...原创 2020-02-07 10:56:10 · 87 阅读 · 0 评论 -
Future模式(凭据模式)
此种方式将Future与Task分离开来。导致finish()方法暴露出来。被外部调用。更优的方式将Future与Task结合起来。参考JDK FutureTask类不便于管理。如果要实现Cancle,参考FutureTask在内部将callback与future分离开来的设计public interface Future<T>{ //获取返回值 ...原创 2020-02-07 10:56:17 · 90 阅读 · 0 评论 -
Latch(阀门)设计模式
CyclicBarrier与CountDownLatch区别: CycliBarrier可以重用,而CountDownLatch不可以。在设计上之所以可以重用,是因为CycliBarrier中是一群线程在等一个状态,这个状态有自身打破,而CountDownLatch是一群线程在等待一个状态。这个状态由另外的线程打破。CountDownLatch类实现public cla...原创 2020-02-07 10:56:24 · 176 阅读 · 0 评论 -
Thread-Per-Message模式
为每一个消息开辟一个线程处理此种设计模式存在巨大的缺陷。因为JVM开创线程数量是有限的。此种方式可以用于系统资源初始化,或者系统关闭时资源回收。如果线程数量较多,可以采用线程池实现。如聊天程序实现:public class ChatServer{ //端口 private final int port; //服务类 private Th...原创 2020-02-07 10:56:52 · 393 阅读 · 0 评论 -
Two Phase Termination模式
1.线程停止的two phase termination线程分为两个阶段,第一个阶段是正常工作,第二个阶段是处理终止信息如资源释放。第二个阶段要确保如下几点: 1.保证安全性 2.百分之百确保线程结束 3.对资源的释放时间要确保在一个可控范围内例如:public void run(){ try{ this.chat()...原创 2020-02-07 10:56:48 · 142 阅读 · 0 评论 -
Balking模式(犹豫模式)
如果线程发现某个对象状态改变了,则放弃当前的工作。比如Word文档编辑时的Ctr +s与系统自动保存。Balking模式主要是关注状态例如:需要初始化系统全局资源,一旦初始化过了就不再加载public synchronized HashMap load(){ if(hasLoad){ return hashMap; } hashMap = ...原创 2020-02-07 10:57:04 · 480 阅读 · 0 评论 -
Active Object(主动对象模式)
主动对象拥有自己独立的线程,可以接受异步的消息。并且能返回结果。原创 2020-02-07 10:57:10 · 1408 阅读 · 0 评论 -
观察者模式
观察者模式抽象被观察者角色:也就是一个抽象主题,它把所有对观察者对象的引用保存在一个集合中,每个主题都可以有任意数量的观察者。抽象主题提供一个接口,可以增加和删除观察者角色。一般用一个抽象类和接口来实现。抽象观察者角色:为所有的具体观察者定义一个接口,在得到主题通知时更新自己。具体被观察者角色:也就是一个具体的主题,在集体主题的内部状态改变时,所有登记过的观察者发出通知。具体观察者...原创 2020-02-07 10:57:18 · 98 阅读 · 0 评论 -
Event Bus设计
模式实现:注解加服务者提供框架实现三大要素:EventBus,Dispatcher,RegistryEventBus:提供对外部操作的方法。Registry:用来整理所有在EventBus上注册的Subsriber(订购者)。Dispatcher:负责对消息进行推送。/*** 定义Event Bus所使用的方法*/public interface Bus {...原创 2020-02-09 09:05:36 · 164 阅读 · 0 评论 -
Worker Thread模式
重要角色: 1.流水线工人:流水线工人主要对传送带上的产品进行加工。 2.流水线传送带:用于传送来自上游的产品 3.产品组装说明书:用于说明该产品如何组装1.产品组装说明书public abstract class InstructionBook{ public final void create(){ ...原创 2020-02-09 09:06:19 · 187 阅读 · 0 评论 -
垃圾回收跟踪机制Reference
1.Strong Reference以及LRUCachepublic class Reference{ //1M private final byte[] data = new byte[2 << 19]; protected void finalize() throws Throwable{ System.out....原创 2020-02-09 09:06:03 · 144 阅读 · 0 评论 -
上下文设计模式
上下文定义:贯穿整个系统或阶段生命周期的对象,其中包含了系统全局的一些信息,比如登录之后的用户信息,账号信息,以及程序每一个阶段运行时的数据。比如:单例模式的对象也就是上下文private ConcurrentHashMap<Thread,ActionContext> contexts = new ConcurrentHashMap<>();public ...原创 2020-02-09 09:07:24 · 2094 阅读 · 0 评论 -
Guarded Suspension模式(确保挂起)
发现条件不满足时,就暂时挂起等待条件满足,常见的在BlockingQueue中含有大量的Guarded Suspension模式public class GuardedSuspensionQueue<T>{ private final LinkedList<T> queue = new LinkedList<>(); private f...原创 2020-02-09 09:06:55 · 141 阅读 · 0 评论 -
7种单例设计模式
类只有在主动使用时才会初始化:六种情形:new ,static属性,static方法,反射,初始化父类,main所在类 方式 线程安全 高性能 懒加载 饿汉式 安全。 由于instance作为类变量,初始化时会被收入进<clinit>方法。 ...原创 2020-02-09 09:06:35 · 96 阅读 · 0 评论 -
Event-Driven Architecture(事件驱动)
EventS:需要被处理的数据Event Handlers:处理Event的方式方法Event Loop:维护Events和Event Handler之间的交互流程,一般采用queue代替Events属性 类型和数据同步的EDA框架实现public interface Message {Class<? extends Message>...原创 2020-02-09 09:05:50 · 695 阅读 · 0 评论