多线程的单例设计模式

多线程的单例设计模式:

保证某个类中内存中只有一个对象

(1)设计模式:

解决某类问题行之有效的方法,是一种思想,是规律的总结。

(2)用来保证某个类在内存中只有一个对象

(3)保证唯一性的思想及步骤

1、为了避免其他程序建立该类对象,先禁止其他程序建立该类对象,即将构造函数私有化。

2、为了其他程序访问到该类对象,须在本类中创建一个该类私有对象。

3、为了方便其他程序访问到该类对象,可对外提供一个公共访问方式。

(4)单例设计模式的两种方式

A:饿汉式 当类加载的时候,就创建对象。

class Student { private Student() {} //将构造函数私有化,不让别的类建立该类对象 private static final Student s = new Student(); //自己建立一个对象 public static Student getInstance() //提供一个公共访问方式 { return s; } }

B:懒汉式 当使用的使用,才去创建对象。

class Student { private Student() {} private static final Student s = null; public static Student getInstance() { if(s==null) { s= new Student(); } return s; } }

(5)饿汉式和懒汉式的区别:

1、饿汉式是类一加载进内存就创建好了对象;

2、懒汉式则是类才加载进内存的时候,对象还没有存在,只有调用了getInstance()方法时,对象才开始创建。

3、懒汉式是延迟加载,如果多个线程同时操作懒汉式时就有可能出现线程安全问题,解决线程安全问题可以加同步来解决。但是加了同步之后,每一次都要比较锁,效率就变慢了,所以可以加双重判断来提高程序效率。

如将上述懒汉式的Instance函数改成同步:

public static Single getInstance() { if(s==null) { synchronized(Single.class) { if(s==null) s=new Single(); } } return s; }

注:开发常用饿汉式,因为饿汉式简单安全。懒汉式多线程的时候容易发生问题。

原文发布于微信公众号 - zhisheng(zhisheng_blog)

原文发表时间:2016-04-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏企鹅号快讯

百篇(3):使用注解和反射打造ORM框架

java使用注解和反射打造一个简单的ORM Table of Contents 原理 实现 1. 定义我们需要的注解 2. 反射工具类 3. 简单的 model...

27960
来自专栏小筱月

单例模式 实现

上面那种直接在方法上加锁的方式其实不够好,因为在方法上加了内置锁在多线程环境下性能会比较低下,所以我们可以将锁的范围缩小

51020
来自专栏闻道于事

Oracle数据库 拾漏补缺

select语句的基本使用 可以查询需要的列,行,可以进行多表链接,连接查询。 ? select e.*,e.sal/30 from p_emp e selec...

35380
来自专栏用户画像

JAVA笔试题

4.public、private、protected、Friendly的区别与作用域,以及不写时的区别?

13010
来自专栏性能与架构

Mysql 排序操作的实现思路

在MySQL中,ORDER BY的实现有如下两种类型: (1)通过有序索引直接取得有序的数据,不用进行任何排序操作即可满足客户端要求 (2)通过MySQL的排序...

37670
来自专栏偏前端工程师的驿站

简易计算器

  该计算器实现了简单的加、减、乘、除、正负数的功能,以从左到右的顺序来运算。UI层通过Arithmetic来操作各种运算类,这些运算类都继承了Operator...

20860
来自专栏爱撒谎的男孩

设计模式之单例模式

15140
来自专栏Python爱好者

Java基础笔记19

15760
来自专栏xingoo, 一个梦想做发明家的程序员

Elasticsearch【正则搜索】分析&实践

在ES中有很多使用不是很频繁的查询,可以达到一些特殊的效果。比如基于行为路径的漏斗模型。本篇就从使用上讲述一下正则表达式查询的用法。 Regexp Que...

39580
来自专栏java 成神之路

Java 序列化 之 单例模式

36270

扫码关注云+社区

领取腾讯云代金券