单例设计模式-静态内部类

静态内部类

静态内部类应用实例

代码演示

package com.atguigu.principle.singleton.type07;/**
* @author victor
* @site https://victorfengming.github.io/
* @company XDL
* @project java_mode
* @package com.atguigu.principle.singleton.type07
* @created 2021-02-02 20:37
* @function ""
*/
public class SingletonTest07 {public static void main(String[] args) {System.out.println("使用静态内部类完成单例设计模式!");Singleton ins = Singleton.getInstance();Singleton ins2 = Singleton.getInstance();System.out.println(ins);System.out.println(ins.hashCode());System.out.println(ins2);System.out.println(ins2.hashCode());System.out.println(ins == ins2);Singleton ins4 = Singleton.getInstance();System.out.println(ins4);/** 使用静态内部类完成单例设计模式!com.atguigu.principle.singleton.type07.Singleton@1540e19d356573597com.atguigu.principle.singleton.type07.Singleton@1540e19d356573597truecom.atguigu.principle.singleton.type07.Singleton@1540e19d* */}
}// 静态内部类完成,推荐使用
class Singleton {private static volatile Singleton instance;// 构造器私有化private Singleton() {}// 写一个静态累不累,该类中有一个静态的属性,这个静态属性他有一个类型就是,Singletonprivate static class SingletonInstance {// 通过jvm底层装载机制保证了,这个是线程安全的private static final Singleton INSTANCE = new Singleton();}// 提供一个静态公有方法,直接返回SingletonInstance.INSTANCEpublic static Singleton getInstance() {return SingletonInstance.INSTANCE;}
}

优缺点说明:

  1. 这种方式采用了类装载的机制来保证初始化实例时只有一个线程

  2. 静态内部类方式在Singleton类被装载时并不会立即实例化,而是在需要实例化时,调用getInstance方法,才会装载SingletonInstance类,从而完成Singleton的实例化.

  3. 类的静态属性只会在第一次加载类的时候初始化,所以在这里,JVM帮助我们保证了线程的安全性,在类进行初始化时,别的线程时无法进入的

  4. 优点: 避免了 线程不安全 ,利用静态内部类特点实现延迟加载,效率高

  5. 结论: 推荐使用

更多:http://victorfengming.gitee.io/design_pattern/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/455121.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Symbian系统开发教程(二)

第二章:数据类型与语法 作者:谢兴 enigma19971hotmail.com 转载需注明出处 下载word版本 Symbian系统已经提供了一套已经定义好的内置的数据类型。为了保证你的代码是编译器无关的,应当使用下面symbian系统提供的数…

design php 如何使用ant_Ant Design Pro初探—添加面包屑

Ant Design Pro初探—添加面包屑上次咱们说了新建页面!页面建成了,开始填充页面 新建面页面不会的看上一片文章:Ant Design Pro初探—新建页面首先是需要添加家面包屑,上代码:import React, { PureComponent } from react;import …

C++主要操作符重载的定义和总结

C中预定义的运算符的操作对象只能是基本数据类型,实际上,对于很多用户自定义类型,也需要有类似的运算操作。例如: class complex { public: complex(double r0.0,double I0.0){realr;imagI;} void display(); private: do…

原生JS数组去重的几种方法

有时候我们做项目的时候往往会需要把数组里面一些重复的项去掉,但是原生JS有排序,有筛选等等,但是就是没有数组去重怎么办呢?这能怎么办,自己手动实现嘛。(以下代码直接在原型上添加的的方法,为…

单例设计模式-枚举

枚举 枚举应用实例 代码演示 package com.atguigu.principle.singleton.type08;/** */ public class SingletonTest08 {public static void main(String[] args) {Singleton instance Singleton.INSTANCE;Singleton instance2 Singleton.INSTANCE;System.out.println(inst…

抛物线交点式公式_抛物线交点式

以下是范文网www zhuodaoren com 分享的6 已知抛物线与轴两交点在轴同侧,它们的距离的平方等于,则的值为( ),希望能帮助到大家!(一)6 已知抛物线与轴两交点在轴同侧,它们的距离的平方等于,则的值为( )函数与一元二次方…

学习的动力

要有自学的意识,这是一个知识不断更新、不断涌现的时代,大学里的很多知识是过时的,就算入校时是热门行业的但很可能四年后毕业找工作时已经变成了夕阳产业,学习是一种能力,但首先是一种态度,一个人想在快速…

java面向对象之父类的引用指向子类的对象

1 package Text; 2 3 public class Job { 4 public void dowork(){ 5 6 } 7 } 1 package Text; 2 3 public class Luosidao extends Job{ 4 public void dowork(){ 5 System.out.println("螺丝刀拧螺丝。。。"); 6 } 7 } 1 packa…

单例模式在JDK应用的源码分析

单例模式在JDK应用的源码分析 单例模式在jdk中的源码分析 在我们JDK中,java.lang.Runtime就是经典的单例模式(恶汉式) 代码分析Debug源码代码说明 public class Runtime {private static Runtime currentRuntime new Runtime();/*** Returns the runtime object associate…

lisp语言cond和if套用_LISP - 决策

决策结构需要程序员指定一个或多个条件由程序进行评估或测试,以及要执行的语句或语句如果条件被确定为true,如果条件被确定为false那么选择要执行其他语句。下面是在大多数编程语言中一个典型的决策结构的一般形式为:LISP提供了以下类型的决策…

H264基本概念之 宏块、片和片组

这几个概念对比音频信号处理可是全新的,下面简要介绍一下定义和作用: 1、宏块(Macro Block):一个编码图像首先要划分成多个块(4x4 像素)才能进行处理,显然宏块应该是整数个块组成&…

CodeVS 1044 拦截导弹(DP)

题目大意&#xff1a; http://codevs.cn/problem/1044/ 第一问题就是求序列的最长递减数列的长度&#xff0c;第二问就是求数列的最长递增序列的长度。 代码&#xff1a; #include <iostream>using namespace std;int arr[30] {0}; int dp[30] {0}; int mp[30] {0};in…

链表(Linked List)之单链表

原文地址:传送门 链表(Linked List)介绍 链表是有序的列表&#xff0c;但是它在内存中是存储如下 小结: 链表是以节点的方式来存储,是链式存储 每个节点包含 data 域&#xff0c; next 域&#xff1a;指向下一个节点. 如图&#xff1a;发现链表的各个节点不一定是连续存储…

有字符csv文件导入matlab_Matlab:如何读取CSV文件以及如何读取带有字符串数据项的CSV文件...

CSV&#xff0c;逗号分开的文件&#xff0c;如果能快速的读取这些文件中的数据&#xff0c;无疑会帮助我们解决很多问题。1、 只有数据的CSV文件&#xff0c;CSV file that includes only numbers.As an example, create a text file, named as data.csv if you prefer, which …

xchg_mb_border()

顾名思义&#xff0c; xchg_mb_border() 交换 MB 边界的像素。阅读代码可知&#xff0c;交换双方为边界缓存 (left_border,top_borders) 与重建图象中的相应数据。其中 xchg 参数是否为 1 决定&#xff0c;在从边界缓存赋值到重建图象的同时&#xff0c;是否保存重建图象的数据…

Introduction to the Optimizer --cbo

http://docs.oracle.com/cd/B10500_01/server.920/a96533/optimops.htm

统计字符串中某个字出现的次数

package ch11;import java.util.Scanner;/** * Created by liwenj on 2017/7/21. */public class T6 { public static void main(String[] args) { String w "我爱你中国&#xff0c;我爱你故乡"; String a "爱"; int k0; …

jedispool redis哨兵_通过java哨兵JedisSentinelPool代码示例连接对配置的redis哨兵主从模式进行测试验证...

一、前言本文章通过关于java的jedis(2.6.0)的redis客户端连接驱动包&#xff0c;对配置的redis哨兵主从读写模式配置进行示例代码验证&#xff0c;详细参见具体配置步骤&示例代码说明部分。二、配置步骤1. 安装redis(参考其他文章教程),并配置主从模式(参考其他相关文章&am…

链表(Linked List)之双向链表

双向链表应用实例 使用带head头的双向链表实现 –水浒英雄排行榜 管理单向链表的缺点分析: 单向链表&#xff0c;查找的方向只能是一个方向&#xff0c;而双向链表可以向前或者向后查找。 单向链表不能自我删除&#xff0c;需要靠辅助节点 &#xff0c;而双向链表&#xff…

H264 解码耗时分析

在数字基带处理器上代码的最佳放置 美国模拟器件公司 Jose Fridman   在手机等嵌入式系统中&#xff0c;除了处理器执行时间外&#xff0c;最重要的资源就是设备总线和存储器接口。本文将介绍一种在使用指令高速缓存时其带宽消耗的基础上&#xff0c;统计分析高速缓存所采用…