当前位置: 首页 > news >正文

0605-JavaSE-单例模式-饿懒汉模式

​​​​​​​

不能放在方法里面(因为每个线程调用都会在方法里面实例化一个locker对象,但不属于同一个对象),然后要用static修饰成静态变量才会起到效果

//单例设计模式
//饿汉模式:在加载类的时候就已经开始创建
//static成员初始化在类加载的时候
//jvm一旦启动就加载
//每个类的类对象在Jvm中只有一份
class Singleton{private static Singleton instance =new Singleton();private Singleton(){//防止创建多个实例//private,default,public,关键字的访问权限、}public static Singleton getInstance() {return instance;}
}
//懒汉模式:在使用的时候再去创建,而不是像懒汉模式一样在类加载(即程序启动)的时候扎堆创建(会使程序启动时间拖慢)。具有分时性,使用户几乎感受不到影响
//懒汉模式的缺点:?
class SingleLazy{private static volatile SingleLazy instance=null;private static Object locker =new Object();//private SingleLazy(){}//静态方法的特性?public static SingleLazy getInstance() {// Object locker =new Object();//不能放在方法里面(因为每个线程调用都会在方法里面实例化一个locker对象,但不属于同一个对象),// 然后要用static修饰成静态变量才会起到效果if(instance==null){synchronized (locker){if(instance==null){instance=new SingleLazy();}}}return instance;}
}
//new SingleLazy 可看做为赋值操作-->
//1.向内存申请一片空间 2.初始化对象 3.将地址赋给对象--2,3操作可能会被编译器优化成3,2
//然后由于第一个if,其他线程被调度在第一个if条件判断后,会导致直接返回一个未被初始化的对象
//static静态方法类属性如何被开始加载
//注意懒汉模式在多线程的情况下会出现线程安全问题,可能会出现覆盖问题
//为了解决上述问题:1.加锁打包成原子操作
//2.由于上锁会使效率降低,所以可以在外面加if条件判断
//3.为了解决潜在的内存可见性问题和指令重排序问题可在变量上加上一个关键字volatile(表示该变量是可变的,编译器便不会对该变量进行优化操作)
public class Demo2 {public static void main(String[] args) {Singleton instance=Singleton.getInstance();// Singleton singleton=new Singleton();无法创建SingleLazy singleLazy=SingleLazy.getInstance();}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 滑动窗口算法:巧妙玩转数据的窗外世界
  • 基于Python实现可视化分析中国500强排行榜数据的设计与实现
  • 【RabbitMQ】RabbitMQ配置与交换机学习
  • CUDA 编程(1):使用Grid 和 Block分配线程
  • Vue3 响应式API:高级函数(二)
  • 线性代数|机器学习-P11方程Ax=b求解研究
  • 【linux】进程控制——进程创建,进程退出,进程等待
  • 【Python深度学习】——信息量|熵
  • OPPO高级项目经理曹帆受邀为第十三届中国PMO大会演讲嘉宾
  • SpringBootWeb 篇-深入了解 Redis 五种类型命令与如何在 Java 中操作 Redis
  • 使用Ollama+OpenWebUI部署和使用Phi-3微软AI大模型完整指南
  • Python 很好用的爬虫框架:Scrapy:
  • 设计随笔 ---- ADR4525 篇
  • 【JAVASE】java语法(成员变量与局部变量的区别、赋值运算符中的易错点)
  • 基于R语言的糖尿病检测模型准确率97%
  • [LeetCode] Wiggle Sort
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • HashMap ConcurrentHashMap
  • input实现文字超出省略号功能
  • iOS 系统授权开发
  • jquery cookie
  • mysql 数据库四种事务隔离级别
  • 安装python包到指定虚拟环境
  • 今年的LC3大会没了?
  • 那些被忽略的 JavaScript 数组方法细节
  • 盘点那些不知名却常用的 Git 操作
  • 深入 Nginx 之配置篇
  • 使用SAX解析XML
  • 数据结构java版之冒泡排序及优化
  • 正则表达式小结
  • - 转 Ext2.0 form使用实例
  • ionic异常记录
  • 第二十章:异步和文件I/O.(二十三)
  • ​Spring Boot 分片上传文件
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • #{}和${}的区别是什么 -- java面试
  • $forceUpdate()函数
  • (0)Nginx 功能特性
  • (23)Linux的软硬连接
  • (vue)el-tabs选中最后一项后更新数据后无法展开
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (三)Kafka离线安装 - ZooKeeper开机自启
  • (十) 初识 Docker file
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (一)u-boot-nand.bin的下载
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite
  • (转)负载均衡,回话保持,cookie
  • .apk文件,IIS不支持下载解决
  • .naturalWidth 和naturalHeight属性,
  • .net 7和core版 SignalR
  • .net6 core Worker Service项目,使用Exchange Web Services (EWS) 分页获取电子邮件收件箱列表,邮件信息字段
  • .net快速开发框架源码分享