返回顶部
首页 > 资讯 > 精选 >Java单例模式怎么写
  • 912
分享到

Java单例模式怎么写

2023-06-19 09:06:04 912人浏览 泡泡鱼
摘要

本篇内容主要讲解“Java单例模式怎么写”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java单例模式怎么写”吧!这个模式是很有意思,而且比较简单,但是我还是要说因为它使用的是如此的广泛,如此的

本篇内容主要讲解“Java单例模式怎么写”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java单例模式怎么写”吧!

这个模式是很有意思,而且比较简单,但是我还是要说因为它使用的是如此的广泛,如此的有人缘,单例就是单一、独苗的意思,那什么是独一份呢?你的思维是独一份,除此之外还有什么不能山寨的呢?我们举个比较难复制的对象:皇帝

中国的历史上很少出现两个皇帝并存的时期,是有,但不多,那我们就认为皇帝是个单例模式,在这个场景中,有皇帝,有大臣,大臣是天天要上朝参见皇帝的,今天参拜的皇帝应该和昨天、前天的一样(过渡期的不考虑,别找茬哦),大臣磕完头,抬头一看,嗨,还是昨天那个皇帝,单例模式,绝对的单例模式,先看类图:

然后我们看程序实现,先定一个皇帝:

package com.cbf4life.singleton1;public class Emperor {       private static Emperor emperor = null;//定义一个皇帝放在那里,然后给这个皇帝名字       private Emperor(){        //世俗和道德约束你,目的就是不让你产生第二个皇帝        }        public static Emperor getInstance(){            if(emperor == null){//如果皇帝还没有定义,那就定一个                emperor = new Emperor();            }            return emperor;        }    //皇帝叫什么名字呀    public static void emperorInfo(){        System.out.println("我就是皇帝某某某....");    }}

然后定义大臣:

package com.cbf4life.singleton1;@SuppressWarnings("all")public class Minister {        public static void main(String[] args) {            //第一天            Emperoremperor1=Emperor.getInstance();            emperor1.emperorInfo();//第一天见的皇帝叫什么名字呢?            //第二天            Emperor emperor2=Emperor.getInstance(); Emperor.emperorInfo();            //第三天            Emperor emperor3=Emperor.getInstance(); emperor2.emperorInfo();            //三天见的皇帝都是同一个人,荣幸吧!        }}

看到没,大臣天天见到的都是同一个皇帝,不会产生错乱情况,反正都是一个皇帝,是好是坏就这一个,只要提到皇帝,大家都知道指的是谁,清晰,而又明确。问题是这是通常情况,还有个例的,如同一个时期同一个朝代有两个皇帝,怎么办?

单例模式很简单,就是在构造函数中多了加一个构造函数,访问权限是 private 的就可以了,这个模式是简单,但是简单中透着风险,风险?什么风险?在一个 B/S 项目中,每个 Http Request 请求到 J2EE 的容器上后都创建了一个线程,每个线程都要创建同一个单例对象,怎么办?,好,我们写一个通用的单例程序,然后分析一下:

package com.cbf4life.singleton3;@SuppressWarnings("all")    public class SingletonPattern {        private static SingletonPattern singletonPattern= null;        //限制住不能直接产生一个实例        private SingletonPattern(){        }        public SingletonPattern getInstance(){            if(this.singletonPattern == null){//如果还没有实例,则创建一个                this.singletonPattern = new SingletonPattern();            }            return this.singletonPattern;        }}

我们来看黄色的那一部分,假如现在有两个线程 A 和线程 B,线程 A 执行到 this.singletonPattern = new SingletonPattern(),正在申请内存分配,可能需要 0.001 微秒,就在这 0.001 微秒之内,线程 B 执行到 if(this.singletonPattern == null),你说这个时候这个判断条件是 true 还是 false?是 true,那然后呢?线程 B 也往下走,于是乎就在内存中就有两个 SingletonPattern 的实例了,看看是不是出问题了?

如果你这个单例是去拿一个序列号或者创建一个信号资源的时候,会怎么样?业务逻辑混乱!数据一致性校验失败!最重要的是你从代码上还看不出什么问题,这才是最要命的!因为这种情况基本上你是重现不了的,不寒而栗吧,那怎么修改?有很多种方案,我就说一种,能简单的、彻底解决问题的方案:

package com.cbf4life.singleton3;@SuppressWarnings("all")    public class SingletonPattern {        private static final SingletonPattern singletonPattern= new   SingletonPattern();        //限制住不能直接产生一个实例        private SingletonPattern(){        }        public synchronized static SingletonPattern getInstance(){ return singletonPattern;        }}

直接 new 一个对象传递给类的成员变量 singletonpattern,你要的时候 getInstance()直接返回给你,解决问题!

到此,相信大家对“Java单例模式怎么写”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: Java单例模式怎么写

本文链接: https://lsjlt.com/news/295232.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java单例模式怎么写
    本篇内容主要讲解“Java单例模式怎么写”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java单例模式怎么写”吧!这个模式是很有意思,而且比较简单,但是我还是要说因为它使用的是如此的广泛,如此的...
    99+
    2023-06-19
  • java单例模式实现代码怎么写
    在Java中实现单例模式有多种方式,以下是其中几种常用的实现方式: 饿汉式(线程安全): public class Single...
    99+
    2023-10-24
    java
  • Java中单例模式怎么用
    这篇文章给大家分享的是有关Java中单例模式怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。注意单例类只能有一个实例。单例类必须自己创建自己的唯一实例。单例类必须给所有其他对象提供这一实例。优点在内存里只有一...
    99+
    2023-06-29
  • Java单例模式怎么理解
    这篇文章主要讲解了“Java单例模式怎么理解”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java单例模式怎么理解”吧!一、设计模式概览1.1、软件设计模式的概念软件设计模式(Softwar...
    99+
    2023-06-22
  • java单例模式怎么实现
    Java中单例模式的实现方法有以下几种:1. 懒汉式(线程不安全):```public class Singleton {priva...
    99+
    2023-08-23
    java
  • c++单例模式的代码怎么写
    下面是一个简单的C++单例模式的代码示例: class Singleton { private: static Single...
    99+
    2023-10-26
    c++
  • Java中单例模式的七种写法示例
    目录前言1、饿汉式(线程安全)⭐2、懒汉式(线程不安全)⭐ 3、懒汉式(加锁)4、懒汉式(双重校验锁)⭐5、单例模式(静态内部类)6、单例模...
    99+
    2024-04-02
  • java的单例模式怎么实现
    今天小编给大家分享一下java的单例模式怎么实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下...
    99+
    2024-04-02
  • 怎么掌握Java的单例模式
    这篇“怎么掌握Java的单例模式”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么掌握Java的单例模式”文章吧。单例模式:...
    99+
    2023-06-30
  • Java单例模式的几种常见写法
    目录1.饿汉模式2.懒汉模式3.静态内部类4.枚举总结1.饿汉模式 饿汉模式也叫预加载模式,它是在类加载时直接创建并初始化单例对象,所以它并不存在线程安全的问题。它是依靠 Class...
    99+
    2024-04-02
  • java中单例模式的写法有哪些
    小编给大家分享一下java中单例模式的写法有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、单例模式属于创建者模式的一种, 单例模式的目的是使该类只有一个实...
    99+
    2023-06-15
  • 浅析Java单例设计模式(自写demo)
    目录单例模式特点单例模式优点实现方式饿汉式(线程安全)懒汉式单例模式特点 1、构造器私有 2、在一个Java应用程序中,可保证只有一个实例对象 3、只提供一个供外界调用的getIns...
    99+
    2024-04-02
  • Java设计模式-单例模式
    单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供...
    99+
    2023-06-05
  • java设计模式之怎么实现单例模式
    这篇文章主要介绍了java设计模式之怎么实现单例模式的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇java设计模式之怎么实现单例模式文章都会有所收获,下面我们一起来看看吧。单元素的枚举类型经常成为实现 Sing...
    99+
    2023-07-04
  • Java设计模式之单例模式
    目录什么是设计模式?单例模式是什么?单例模式设计的原则是什么?Java实现单例模式的5种方式?懒汉饿汉静态内部类双重校验锁DCL(Double Check Lock)枚举(num)总...
    99+
    2024-04-02
  • Java单例模式的常见写法有哪些
    这篇文章主要介绍“Java单例模式的常见写法有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java单例模式的常见写法有哪些”文章能帮助大家解决问题。1.饿汉模式饿汉模式也叫预加载模式,它是在类...
    99+
    2023-06-30
  • java怎么实现一个单例模式
    在Java中,可以通过以下两种方式来实现单例模式:1. 懒汉式单例模式(Lazy Initialization):```javapu...
    99+
    2023-09-27
    java
  • Java单例模式与破坏单例模式的概念是什么
    本文小编为大家详细介绍“Java单例模式与破坏单例模式的概念是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java单例模式与破坏单例模式的概念是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。什么是单例...
    99+
    2023-07-05
  • Java单例模式分析
    目录单例模式为什么要用单例单例的关键点几种写法懒汉式饿汉式静态内部类写法枚举单例容器实现单例参考总结单例模式 为什么要用单例 确保某个类只有一个对象,常用于访问数据库操作,服务的配置...
    99+
    2024-04-02
  • Java的单例模式是什么
    单例(Singleton)模式是Java中最简单的设计模式之一。这种类型的设计模式属于创建模式,因为此模式提供了创建对象的最佳方法之一。 (推荐学习:java课程)这种模式涉及一个类,它负责创建一个对象,同时确保只...
    99+
    2015-11-05
    java教程 Java
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作