博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java单例模式几种常见实现方式
阅读量:2179 次
发布时间:2019-05-01

本文共 1938 字,大约阅读时间需要 6 分钟。

  1. 什么是单例模式

    因进程需要,有时我们只需要某个类同时保留一个对象,不希望有更多对象,此时,我们则应考虑单例模式的设计。

  2. 单例模式的特点

    1、单例模式只能有一个实例。
    2、单例类必须创建自己的唯一实例
    3、单例类必须向其他对象提供这一实例。

  3. 单例模式的实现

    1. 懒汉式(线程不安全)
    public class SingletonDemo {
    private static SingletonDemo instance; private SingletonDemo(){
    } public static SingletonDemo getInstance(){
    if(instance==null){
    instance=new SingletonDemo(); } return instance; }}
    1. 懒汉式,线程安全
    public class SingletonDemo {
    private static SingletonDemo instance; private SingletonDemo(){
    } public static synchronized SingletonDemo getInstance(){
    if(instance==null){
    instance=new SingletonDemo(); } return instance; }}

    这种模式在多线程的时候效率比较低,生产上不推荐.

    1. 饿汉式,线程安全
    public class SingletonDemo {
    private static SingletonDemo instance=new SingletonDemo(); private SingletonDemo(){
    } public static SingletonDemo getInstance(){
    return instance; }}
    1. 静态内部类(线程安全)
    public class SingletonDemo {
    private static class SingletonHolder{
    private static SingletonDemo instance=new SingletonDemo(); } private SingletonDemo(){
    System.out.println("Singleton has loaded"); } public static SingletonDemo getInstance(){
    return SingletonHolder.instance; }}
    1. 枚举方法(线程安全)
    enum SingletonDemo{
    INSTANCE; public void otherMethods(){
    System.out.println("Something"); }}
    1. 双重校验(线程安全)
    public class SingletonDemo {
    private static SingletonDemo instance; private SingletonDemo(){
    System.out.println("Singleton has loaded"); } public static SingletonDemo getInstance(){
    if(instance==null){
    synchronized (SingletonDemo.class){
    if(instance==null){
    instance=new SingletonDemo(); } } } return instance; }}

转载地址:http://fkjkb.baihongyu.com/

你可能感兴趣的文章
分析C语言的声明
查看>>
TCP为什么是三次握手,为什么不是两次或者四次 && TCP四次挥手
查看>>
C结构体、C++结构体、C++类的区别
查看>>
进程和线程的概念、区别和联系
查看>>
CMake 入门实战
查看>>
绑定CPU逻辑核心的利器——taskset
查看>>
Linux下perf性能测试火焰图只显示函数地址不显示函数名的问题
查看>>
c结构体、c++结构体和c++类的区别以及错误纠正
查看>>
Linux下查看根目录各文件内存占用情况
查看>>
A星算法详解(个人认为最详细,最通俗易懂的一个版本)
查看>>
利用栈实现DFS
查看>>
逆序对的数量(递归+归并思想)
查看>>
数的范围(二分查找上下界)
查看>>
算法导论阅读顺序
查看>>
Windows程序设计:直线绘制
查看>>
linux之CentOS下文件解压方式
查看>>
Django字段的创建并连接MYSQL
查看>>
div标签布局的使用
查看>>
HTML中表格的使用
查看>>
(模板 重要)Tarjan算法解决LCA问题(PAT 1151 LCA in a Binary Tree)
查看>>