单例模式:Java单例模式的几种写法及它们的优缺点
总结下Java单例模式的几种写法:
1. 饿汉式
public class Singleton
{ private static Singleton instance = new Singleton(); private Singleton() {} public static Singleton getInstance() {
return instance;
} }
优点:实现简单,不存在多线程问题,直接声明一个私有对象,然后对外提供一个获取对象的方法。
缺点:class 类在被加载的时候创建Singleton实例,如果对象创建后一直没有使用,则会浪费很大的内存空间,此方法不适合创建大对象。
2. 懒汉式(线程不安全)
public class Singleton
{ private static Singleton instance = null; private Singleton() {} public static Singleton getInstance() { if (instance == null) {
instance = new Singleton();
}
return instance;
} }
优点:节省内存空间,在使用的时候才会创建;
缺点:在多线程下,可能会创建多个实例(一定要重视这个问题,有时候如果在单例对象的构造方法中做了某些重要操作,创建多个实例可能会造成可怕后果,如:打开Android的Sqlite数据库连接)。
3. 懒汉式(线程安全)
public class Singleton
{ private static Singleton instance = null; private Singleton() {} public synchronized static Singleton getInstance() { if (instance == null) {
instance = new Singleton();
}
return instance;
} }
优点:支持多线程,且以懒汉式的方式加载,不浪费内存空间。
缺点:将 synchronized 块加在方法上,会影响并发量,每次调用getInstance()方法都会线程同步,效率十分低下。最重要的是,当创建好实例对象之后,就不必继续进行同步了。
4.懒汉式(线程安全,推荐)
public class Singleton
{ private static volatile Singleton instance = null; private Singleton() {} public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
} }
优点:支持多线程,并发量高,且以懒汉式加载,不浪费内存空间。
缺点:一时找不出缺点,非要说缺点的话,就是实现比较麻烦。
单例模式:Java单例模式的几种写法及它们的优缺点的更多相关文章
- java多线程的3种写法
1.Thread /** * */ package testJava2.thread; /** * @author xxx.sjtu * @function * @date 2017年5月17日 * ...
- Java中单例七种写法(懒汉、恶汉、静态内部类、双重检验锁、枚举)
/*** * 懒汉模式 1 * 可以延迟加载,但线程不安全. * @author admin * */ public class TestSinleton1 { private static Test ...
- java enum的一种写法记录
public enum TestEnum { provider { @Override public void provide() { this.name = "hjzgg"; } ...
- 9种Java单例模式详解(推荐)
单例模式的特点 一个类只允许产生一个实例化对象. 单例类构造方法私有化,不允许外部创建对象. 单例类向外提供静态方法,调用方法返回内部创建的实例化对象. 懒汉式(线程不安全) 其主要表现在单例类在外 ...
- java设计模式之单例模式(几种写法及比较)
概念: Java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例.饿汉式单例.登记式单例. 单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类必须自己创建 ...
- java单例模式的几种写法比较
概念: Java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例.饿汉式单例.登记式单例. 单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类必须自己创建 ...
- Java:单例模式的七种写法(转载)
第一种(懒汉,线程不安全): package Singleton; /** * @echo 2013-10-10 懒汉 线程不安全 */ public class Singleton1 { priva ...
- Java:单例模式的七种写法[转]
第一种(懒汉,线程不安全): 1 public class Singleton { 2 private static Singleton instance; 3 privat ...
- 【JAVA学习】单例模式的七种写法
尊重版权:http://cantellow.iteye.com/blog/838473 第一种(懒汉.线程不安全): Java代码 public class Singleton { private ...
随机推荐
- OSS阿里云相关文档
OSS阿里云相关文档 oss文档链接
- Redis锁机制的几种实现方式
1. redis加锁分类 redis能用的的加锁命令分表是INCR.SETNX.SET 2. 第一种锁命令INCR 这种加锁的思路是, key 不存在,那么 key 的值会先被初始化为 0 ,然后再执 ...
- centos7安装redis 并配置在后台启动
官网 https://redis.io/download 先进入 目录 /usr/local 1 下载文件包 $ wget http://download.redis.io/releases/red ...
- linux系统编程之进程(三)
今天继续学习进程相关的东东,继上节最后简单介绍了用exec函数替换进程映像的用法,今天将来深入学习exec及它关联的函数,话不多说,正式进入正题: exec替换进程映象: 对于fork()函数,它 ...
- Redis 缓存雪崩、穿透、击穿
缓存雪崩 定义: 同一时间所有 key 大面积失效,比如网站首页的数据基本上都是同一批次去缓存的. 解决方法: ① 存的时候设定随机的失效时间. ② 服务做熔断处理(异常或着慢查询 Hystrix 限 ...
- python_并发编程——消费者和生产者模型
消费者和生产者模型 from multiprocessing import Process,Queue import time import random class Producer(Process ...
- vue PC端,用到的知识
1.vue中通过路由跳转的三种方式 https://blog.csdn.net/qq_40072782/article/details/82533477 2.数组解构,对象解构:https: ...
- 织梦dedecms会员中心分类管理无法修改、删除分类名
member/mtypes.PHP 文件中添加 另外,member/myfriend_group.php文件中也存在同样的问题,也要添加,不添加的话好友分组中也是同样问题
- commons-dbutils使用介绍,commons-dbutils是JDBC的替代品
commons-dbutils是Apache开源组织提供的用于操作数据库的工具包.今天为大家介绍一下该包的常用方法. 对于数据库的操作无外乎增删改查,而增删改本质上可以归为一类,操作方式相同,只是SQ ...
- TPC-H 下载参考
CSDN免费下载地址 tpc-h-v2.17.3.zip tools https://download.csdn.net/download/zes2014/10558251