总结下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单例模式的几种写法及它们的优缺点的更多相关文章

  1. java多线程的3种写法

    1.Thread /** * */ package testJava2.thread; /** * @author xxx.sjtu * @function * @date 2017年5月17日 * ...

  2. Java中单例七种写法(懒汉、恶汉、静态内部类、双重检验锁、枚举)

    /*** * 懒汉模式 1 * 可以延迟加载,但线程不安全. * @author admin * */ public class TestSinleton1 { private static Test ...

  3. java enum的一种写法记录

    public enum TestEnum { provider { @Override public void provide() { this.name = "hjzgg"; } ...

  4. 9种Java单例模式详解(推荐)

    单例模式的特点 一个类只允许产生一个实例化对象. 单例类构造方法私有化,不允许外部创建对象. 单例类向外提供静态方法,调用方法返回内部创建的实例化对象.  懒汉式(线程不安全) 其主要表现在单例类在外 ...

  5. java设计模式之单例模式(几种写法及比较)

    概念: Java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例.饿汉式单例.登记式单例. 单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类必须自己创建 ...

  6. java单例模式的几种写法比较

    概念: Java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例.饿汉式单例.登记式单例. 单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类必须自己创建 ...

  7. Java:单例模式的七种写法(转载)

    第一种(懒汉,线程不安全): package Singleton; /** * @echo 2013-10-10 懒汉 线程不安全 */ public class Singleton1 { priva ...

  8. Java:单例模式的七种写法[转]

    第一种(懒汉,线程不安全):  1 public class Singleton {   2     private static Singleton instance;   3     privat ...

  9. 【JAVA学习】单例模式的七种写法

    尊重版权:http://cantellow.iteye.com/blog/838473 第一种(懒汉.线程不安全): Java代码   public class Singleton { private ...

随机推荐

  1. 2013.5.1 - KDD第十三天

    今天把昨天的思路整理了一下,给中秋发过去了,还没回我. 然后就全天看代码了,把NER跟LTP的接口又过了一下.晚上师兄跟我约好这周六一起把LTP写完,到时候我们俩都早点过来. 这之前需要做的有: 1. ...

  2. 烂笔头@WP 的博文仅供自己学习的备忘录

    前记:本博主的博文仅供自己学习的备忘录. 说明:很久未用博客,登录密码已忘记,费劲找回来,特写本博文申明.因为,今天邮件收到一条博文的评论,有谩骂本博主之意,甚觉委屈.所以,写以下文字说明“1.我的博 ...

  3. selenium 全天课整理(二)

    # encoding=utf-8 ''' selenium 全天 二 ''' #unittest例子 from selenium import webdriver import unittest,ti ...

  4. k8s安装之calico.yaml

    这个calico有点长,我也没有仔细看完. 但部署上去是可用的. 如果节点超过200台,那最好要另外一套配置... 而对于我们,差不多下面的配置够用了. veth_mtu: "1440&qu ...

  5. linux系统编程之信号(二)

    经过了漫长的间歇,对于c语言的学习也被中断了很久,现实确实有很多的无耐,计划中的事情总会被打乱,但不管怎样,学习的道路是不能休止的,所以经过了一断温习后现在继续学习C语言,话不多说,进入正题: 信号分 ...

  6. 接口测试工具soapUI

    一.下载 官网:https://www.soapui.org/ 链接:https://pan.baidu.com/s/15LITTKIvfIoAq5IBpID8gA 提取码:l7p6 二.SoapUI ...

  7. HP DL388 Gen9 Raid P440ar 工具

    HP DL388 Gen9 服务器raid升级P440ar,原先的hpacucli 不能使用,新的工具为hpssacl hpssacli-2.10-14.0.x86_64.rpm 下载地址:wget ...

  8. SPOJ - BALNUM - Balanced Numbers(数位DP)

    链接: https://vjudge.net/problem/SPOJ-BALNUM 题意: Balanced numbers have been used by mathematicians for ...

  9. Java实现数组元素反转

    package com.fgy.demo; /** * 数组元素反转 */ public class demo05 { public static void main(String[] args) { ...

  10. docker 挂载实现容器配置更改为外部文件

    docker安装镜像后,每个服务都是独立的容器,容器与容器之间可以说是没关系,隔离独立的. 而且虚拟出来的这些容器里面的基本安装工具都是没有的,比如vi,vim等等.需要使用,还得安装处理. 那么我们 ...