技术编程|Java知识点梳理( 三 )
文章图片
文章图片
改进后责任链(CoR)模式的应用是比较广泛的 , 包括 Java Web Filter(链式调用) , Struts2 Interceptor(Action代理)和SpringMVC等 。7、单例模式
单例模式核心在于为整个系统提供一个唯一的实例 , 为整个系统提供一个全局访问点 。单例模式从实现上可以分为饿汉式单例和懒汉式单例两种 , 前者天生就是线程安全的 , 后者则需要考虑线程安全性 , 常见的线程安全的懒汉式单例的实现有内部类式和双重检查式两种 。下面给出单例模式几种常见的形式:
(1)饿汉式单例
文章图片
文章图片
(1)懒汉式单例
文章图片
文章图片
(1)线程安全的懒汉式单例 —— 内部类方式
文章图片
文章图片
内部类方式线程安全懒汉式单例的内在原理在于:虚拟机会保证一个类的类构造器
()在多线程环境中被正确的加锁、同步 , 如果多个线程同时去初始化一个类 , 那么只会有一个线程去执行这个类的类构造器
() , 其他线程都需要阻塞等待 , 直到活动线程执行
()方法完毕 。特别需要注意的是 , 在这种情形下 , 其他线程虽然会被阻塞 , 但如果执行
()方法的那条线程退出后 , 其他线程在唤醒之后不会再次进入/执行
()方法 , 因为在同一个类加载器下 , 一个类型只会被初始化一次 。
(4)线程安全的懒汉式单例——双重检查方式
文章图片
文章图片
8、类的生命周期及其初始化时机
类的生命周期主要包括加载、链接、初始化、使用和卸载五个阶段 , 如下图所示:
文章图片
文章图片
(1)遇到new、getstatic、putstatic或invokestatic这四条字节码指令时:注意 , newarray指令触发的只是数组类型本身的初始化 , 而不会导致其相关类型的初始化 , 比如 , new String[]只会直接触发String[]类的初始化 , 也就是触发对类[Ljava.lang.String的初始化 , 而直接不会触发String类的初始化时 , 如果类没有进行过初始化 , 则需要先对其进行初始化 。生成这四条指令的最常见的Java代码场景是:
①使用new关键字实例化对象的时候;②读取或设置一个类的静态字段(被final修饰 , 已在编译器把结果放入常量池的静态字段除外)的时候;③调用一个类的静态方法的时候 。
(2)对类进行反射调用时:使用java.lang.reflect包的方法对类进行反射调用的时候 , 如果类没有进行过初始化 , 则需要先触发其初始化 。
(3)初始化子类时:当初始
文章图片
文章图片
化一个类
文章图片
文章图片
时候 , 如果发现其父类还没有进行过初始化 , 则需要先触发其父类的初始化 。
推荐阅读
- 行业互联网|华为 | 车载以太网物理层及TSN发展现状 与技术趋势
- 技术编程|什么是Plesk虚拟主机控制面板?
- 电池技术|法国发明出世界最快的电极:可将锂电池的密度提高3倍
- 技术编程|人工智能在大视频运维中如何实现CDN硬盘故障预测?
- 电池技术|关于惠州赣锋建设高端聚合物锂电池研发及生产基地建设,赣锋锂业要干大事
- |加速冲刺世界级技术领先地位,大族机器人获1.65亿元A轮融资
- 解码器|苹果 ProRes 视频编解码器获 2020 技术工程艾美奖
- 数据|徐叶润:另类数据技术是驱动资管科技的核心
- 中年|《经济学人》封面文章解析蚂蚁集团:数字技术的崛起代表了金融的未来
- 行业互联网|北科院轻工所技术入选中关村论坛技术交易大会“产业创新领先技术百强项目榜单”
