private static Calendar createCalendar(TimeZone zone,Locale aLocale) { CalendarProvider provider = LocaleProviderAdapter.getAdapter(CalendarProvider.class, aLocale) .getCalendarProvider(); if (provider != null) { try { return provider.getInstance(zon…
转载:https://mp.weixin.qq.com/s/h88UxB9F2MkTbHqck3KQiQ 一.结构性模式: 1.适配器模式: 常用于将一个新接口适配旧接口 肥朝小声逼逼:在我们业务代码中经常有新旧接口适配需求,可以采用该模式. 2.桥接模式: 将抽象和抽象的具体实现进行解耦,这样可以使得抽象和抽象的具体实现可以独立进行变化. 肥朝小声逼逼:这个模式,其实我们每天都在用到,但是你可能却浑然不知.只要你用到面向接口编程,其实都是在用桥接模式. 3.组合模式 让客户端看起来在处理单个对…
Java容器类库中的Map接口(java\util\Map.java)中有一个Entry接口(java\util\Map.java),其中有几个接口方法用到了类和类的按位与操作,即类和类之间有 & 操作符,后面是一个lambda表达式,如下图: 源码如下: public static <K extends Comparable<? super K>, V> Comparator<Map.Entry<K,V>> comparingByKey() { r…
结构型模式: 适配器模式: 用来把一个接口转化成另一个接口. java.util.Arrays#asList() javax.swing.JTable(TableModel) java.io.InputStreamReader(InputStream) java.io.OutputStreamWriter(OutputStream) javax.xml.bind.annotation.adapters.XmlAdapter#marshal() javax.xml.bind.annotation.…
public abstract class Enum<E extends Enum<E>> implements Comparable<E>, Serializable 枚举类存在于java.lang包中,是一个抽象类,实现了Comparable<E>和Serializable接口,说明,枚举实例可以进行比较,实现Seriaalizable接口的目的是在反序列化时不会重新创建一个新的对象. Enum是所有java程序中定义的枚举类的公共基类,更多关于枚举的信…
public final class Class<T> implements java.io.Serializable, GenericDeclaration, Type, AnnotatedElement Class类的实例表示在java运行时的类和接口.枚举是一种类,注解是一种接口.所有的数组也有相应的类,具有相同类型元素和长度的数组共享一个类.原始数据类型(boolean, byte, char, int, long, float和double)和关键字void也有相应的类. Class…
JDK源码中,在研究AQS框架时,会发现很多地方都使用了CAS操作,在并发实现中CAS操作必须具备原子性,而且是硬件级别的原子性,java被隔离在硬件之上,明显力不从心,这时为了能直接操作操作系统层面,肯定要通过用C++编写的native本地方法来扩展实现.JDK提供了一个类来满足CAS的要求,sun.misc.Unsafe,从名字上可以大概知道它用于执行低级别.不安全的操作,AQS就是使用此类完成硬件级别的原子操作. Unsafe是一个很强大的类,它可以分配内存.释放内存.可以定位对象某字段的…
三种工厂模式的详解: 简单工厂模式: 适用场景:工厂类负责创建的对象较少,客户端只关心传入工厂类的参数,对于如何创建对象的逻辑不关心 缺点:如果要新加产品,就需要修改工厂类的判断逻辑,违背软件设计中的开闭原则,且产品类多的话,就会使得简单工厂类比较复杂 在jdk源码中的具体实例(注意看代码中的中文注释) private static Calendar createCalendar(TimeZone zone,Locale aLocale) { CalendarProvider provider…
线程安全 众所周知,Java是多线程的.但是,Java对多线程的支持其实是一把双刃剑.一旦涉及到多个线程操作共享资源的情况时,处理不好就可能产生线程安全问题.线程安全性可能是非常复杂的,在没有充足的同步的情况下,多个线程中的操作执行顺序是不可预测的. Java里面进行多线程通信的主要方式就是共享内存的方式,共享内存主要的关注点有两个:可见性和有序性.加上复合操作的原子性,我们可以认为Java的线程安全性问题主要关注点有3个:可见性.有序性和原子性. Java内存模型(JMM)解决了可见性和有序性…
J.U.C实现基础 AQS.非阻塞数据结构和原子变量类(java.util.concurrent.atomic包中的类),concurrent包中的基础类都是使用这种模式来实现的.而concurrent包中的高层类又是依赖于这些基础类来实现的.从整体来看,concurrent包的实现示意图如下: Java中的许多可阻塞类,例如ReentrantLock.Semaphore.ReentrantReadWriteLock.CountDownLatch等,都是基于AQS构建的. 注:在jdk 1.8.…