设计模式

单例模式

双重校验锁

public class Singleton {

private volatile static Singleton uniqueInstance;

private Singleton() {
}

public static Singleton getUniqueInstance() {
//先判断对象是否已经实例过,没有实例化过才进入加锁代码
if (uniqueInstance == null) {
//类对象加锁
synchronized (Singleton.class) {
if (uniqueInstance == null) {
uniqueInstance = new Singleton();
}
}
}
return uniqueInstance;
}
}

模板方法模式

抽象出步骤的执行顺序作为抽象方法,具体的实现方法交给子类实现

实现 AQS 抽象类的锁,需要重写 CLH 锁的 tryAcquire-tryReleasetryAcquireShared-tryReleaseSharedisHeldExclusively 方法。

重写钩子方法,可以自定义 state 的含义:值为多少时代表加锁成功/失败 or 解锁成功/失败,也可以实现共享锁或独占锁。

观察者模式

具体查看 JUC_Lock 博客的 CompletableFuture 的底层实现

适配器模式

具体查看 SpringMVC 博客的 HandlerAdapter 的底层实现

开闭原则:新增代替修改