Java设计模式--单例模式

单例模式(构造器私有)

单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一,有以下特点:

  • 单例类只能有一个实例。

  • 单例类必须自己创建自己的唯一实例。

  • 单例类必须给所有其他对象提供这一实例。

反射可以破坏单例模式!!!

饿汉式

这种方式比较常用,但容易产生垃圾对象 优点:没有加锁,执行效率会提高。 缺点:类加载时就初始化,浪费内存。

 
package com.lyc.single;//饿汉式单例public class Hungry {//可能会浪费空间private byte[] bytes1= new byte[1024*1024];private byte[] bytes2= new byte[1024*1024];private byte[] bytes3= new byte[1024*1024];private byte[] bytes4= new byte[1024*1024];private Hungry(){​}private static final Hungry instance = new Hungry();//创建对象public static Hungry getInstance(){return instance;}}
 ​
懒汉式

DCL懒汉式:在懒汉式基础上加入双重检验锁,保证线程安全和性能。

 
package com.lyc.single;//懒汉式单例模式public class LazyMan {private LazyMan(){​}private volatile static LazyMan lazyMan;public LazyMan getInstance(){//双重检测锁模式的懒汉式单例,简称:DCL懒汉式if (lazyMan==null){synchronized (LazyMan.class){if (lazyMan==null){lazyMan=new LazyMan();//不是一个原子性操作//1.分配内存给这个对象//2.执行构造方法,初始化对象//3.将这个对象指向这个空间//可能会发生指令重排,导致对象还没初始化完成,就返回了//如果有两个线程在创建对象,可能会造成对象还没初始化完成,就返回了//如果在创建对象时,多个线程同时判断到lazyMan==null,就会创建多个对象//解决方法://1.使用synchronized关键字//2.使用volatile关键字}}}return lazyMan;}//单线程下是安全的//多线程下是不安全的,需要在加锁。}​

静态内部类

 package com.lyc.single;//静态内部类实现public class Holder {private Holder(){​}public static Holder getInstance(){return  InnerClass.holder;}public static class InnerClass{private static final Holder holder = new Holder();}}
 

单例不安全,因为有反射

枚举

 package com.lyc.single;​import java.lang.reflect.Method;​//enum是什么,枚举本身也是一个Class类public enum EnumSingle {INSTANCE;​public EnumSingle getInstance() {return INSTANCE;}}​package com.lyc.single;​import java.lang.reflect.Constructor;import java.lang.reflect.Method;​public class SingleTest {public static void main(String[] args) throws Exception{EnumSingle instance = EnumSingle.INSTANCE;Constructor<EnumSingle> declaredConstructor = EnumSingle.class.getDeclaredConstructor(String.class, int.class);declaredConstructor.setAccessible(true);EnumSingle instance1 = declaredConstructor.newInstance();System.out.println(instance.hashCode());System.out.println(instance1.hashCode());}}
 ​

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

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

相关文章

2025年如何避免使用验证码求解器时被IP封禁

引言 2025年&#xff0c;验证码求解器已成为自动化网络抓取和其他在线流程的关键工具。然而&#xff0c;自动化用户面临的一个常见挑战是IP封禁。当网站检测到自动化活动时&#xff0c;通常会阻止发出请求的IP地址&#xff0c;导致验证码挑战无法解决。本文将探讨使用验证码求…

JVM详解(包括JVM内存模型与GC垃圾回收)

&#x1f4d6;前言&#xff1a; 学会使用Java对于一个程序员是远远不够的。Java语法的掌握只是一部分&#xff0c;另一部分就是需要掌握Java内部的工作原理&#xff0c;从编译到运行&#xff0c;到底是谁在帮我们完成工作的&#xff1f; 接下来着重对Java虚拟机&#xff0c;也就…

【无标题】大亚湾文化体育场多美啊。

请推荐一些常用并且免费的&#xff0c;可直接在线运行【Python】代码的平台并列出对应网址 好的&#xff0c;用户想让我推荐一些常用且免费的、可以直接在线运行Python代码的平台&#xff0c;并且需要列出对应的网址。我需要先回想一下自己知道的在线Python运行环境&#xff0…

权限提升—Windows权限提升土豆家族溢出漏洞通杀全系

前言 OK&#xff0c;Java安全更新不下去了&#xff0c;实在是太难啦啊&#xff0c;想起来提权这一块没怎么更新过&#xff0c;接下来都主要是更新提权这一块的文章了&#xff0c;Java安全的话以后有耐心再搞了。 手动提权 今天主要是讲这个手动的提权&#xff0c;手动提权相…

Vue3 知识点总结

Vue3 知识点总结 1. 核心概念 1.1 Composition API 1.1.1 setup 函数 setup是Vue3中的新的配置项&#xff0c;是组件内使用Composition API的入口在setup中定义的变量和方法需要return才能在模板中使用setup执行时机在beforeCreate之前&#xff0c;this不可用 export defa…

python --face_recognition(人脸识别,检测,特征提取,绘制鼻子,眼睛,嘴巴,眉毛)/活体检测

dlib 安装方法 之前博文 https://blog.csdn.net/weixin_44634704/article/details/141332644 环境: python3.8 opencv-python4.11.0.86 face_recognition1.3.0 dlib19.24.6人脸检测 import cv2 import face_recognition# 读取人脸图片 img cv2.imread(r"C:\Users\123\…

【bug】[42000][1067] Invalid default value for ‘xxx_time‘

MySQL错误解决&#xff1a;Invalid default value for xxx_time’问题分析与修复方案 问题描述 在MySQL数据库操作中&#xff0c;当尝试创建或修改表结构时&#xff0c;可能会遇到以下错误信息&#xff1a; [bug] [42000][1067] Invalid default value for xxx_time这个错误…

Go环境相关理解

Linux上安装的环境变量 ## set go env export GOPATH$HOME/go_workspace export GOPATH/usr/local/go export PATH$PATH:$GOPATH/bin go.mod 和go.sum的理解 go.mod文件 ‌go.mod文件定义了模块的路径和依赖版本‌。它遵循 语义化版本2.0.0规范&#xff0c;记录了当前项目所依…

Next.js 深度解析:全栈React框架的架构哲学与实践精髓

Next.js 作为 React 生态中最流行的全栈框架&#xff0c;已经超越了简单的SSR工具&#xff0c;发展成为完整的Web开发解决方案。以下从八个维度进行深度剖析&#xff1a; 一、核心架构设计 双引擎驱动模型 页面路由系统&#xff1a;基于文件系统的约定式路由渲染引擎&#xff…

禾赛盈利了,但激光雷达没有胜利

还远没有到激光雷达党欢呼的时候。 3月&#xff0c;随着禾赛科技公布2024年报&#xff0c;全世界第一家也是唯一一家实现全年盈利的激光雷达上市公司诞生&#xff0c;为了这个盈利目标&#xff0c;禾赛科技奋斗了十年。 但极大的出货量和不高的盈利水平&#xff0c;让禾赛科技…

心房颤动新机制:ATM/p53通路早期抑制

急性心肌梗死&#xff08;AMI&#xff09;是心血管疾病中的“大魔头”&#xff0c;它悄无声息地侵蚀着心脏的肌肉&#xff0c;导致心脏功能受损&#xff0c;严重时甚至危及生命。而心房颤动&#xff08;AF&#xff09;&#xff0c;这一常见的心律失常&#xff0c;往往在AMI后悄…

Linux 安装 Redis

虚拟机安装 linux https://www.bilibili.com/video/BVldD42177qg?p16 1、安装 gcc,编译环境 yum y install gcc-g 2、将 redis-7.2.4.tar.gz放到 linux。如&#xff0c;放到 opt 里 3、进入/opt 目录下&#xff0c;解压 tar -zxvf redis-7.2.4.tar.gz 4、进入 redis-7.2.4.tar…

六级备考 词汇量积累(day11)

sculpture 雕像 allege 指责&#xff0c;声称 pledge 发誓 breach 违背&#xff0c;违反 defaulty 违约&#xff0c;违反 infringe 侵犯 infringing on small farmers interest blacmail 勒索 idle 无所事事的 deceive 欺骗 perceive 察觉 conceive 设想 conception 设想 verdi…

关于金碟K3,禁用和启用需要流程审批后执行

真是难受,是设计师蠢呢自己问题比较多呢,现在都还没有弄好 点击禁用和启用,通过流程来执行 到底是蠢呢还是设计问题,搞了半日没有效果,搞那么复杂! 而且有样板都没有草鞋成功 BOS设计,表单属性,操作列表: 1、启用禁用流程

导入 Excel 规则批量修改或删除 PDF 文档内容

需要对 PDF 文档内容进行修改的时候&#xff0c;通常我们会需要借助一些专业的工具来帮我们完成。那我们如果需要修改的 PDF 文档较多的时候&#xff0c;有什么方法可以帮我们实现批量操作呢&#xff1f;今天这篇文章就给大家介绍一下当我们需要批量修改多个 PDF 文档的时候&am…

msyql--基本操作之运维篇

检查 root 用户的权限 查看该用户针对这个数据库的权限 -- 如果在终端连接mysql时需要 mysql -u root -p -- 查看用户权限 SELECT user, host FROM mysql.user WHERE user root;可以看的出来root有他的访问权限&#xff0c;如过没有localhost或者% 说明没有访问权限 添加…

Vue 3使用 Socket

在 Vue 3 中使用 Socket&#xff08;如 WebSocket 或基于 WebSocket 的库比如 Socket.IO&#xff09;可以通过组合式 API&#xff08;Composition API&#xff09;来实现得更清晰、模块化。下面我给你展示一个完整的例子&#xff0c;包括使用原生 WebSocket 和使用 Socket.IO 的…

云计算:探索现代科技的未来之云

文章目录 云计算基本概念云计算是什么注意 云计算的价值云计算的部署模式云计算的服务模式主流的云计算技术AWS简介AWS建立了广阔的合作伙伴生态 VMware简介VMware服务介绍 华为云简介华为云Stack模式 云计算基本概念 云计算是什么 云计算是一种模型&#xff0c;它可以实现随时…

光学像差的类型与消除方法

### **光学像差的类型、理解与消除方法** 光学像差是指实际光学系统成像时&#xff0c;由于透镜或反射镜的非理想特性导致的光线偏离理想路径&#xff0c;从而影响成像质量的现象。像差可分为**单色像差**&#xff08;与波长无关&#xff09;和**色差**&#xff08;与波长相关…

什么是ecovadis验厂?ecovadis验厂的好处?ecovadis验厂的重要意义

1. 什么是EcoVadis验厂&#xff1f; EcoVadis验厂&#xff08;又称EcoVadis评估&#xff09;是国际权威的 企业社会责任&#xff08;CSR&#xff09;和可持续发展&#xff08;ESG&#xff09;在线评估&#xff0c;通过审核企业在 环境、劳工与人权、商业道德、可持续采购 四大…