单例模式(Singleton),保证在程序运行期间,内存中只有一个实例对象。

饿汉式,最常用的方式。JVM加载类到内存中时,创建实例,线程安全。

public class Boss
{
private static final Boss boss = new Boss(); private Boss(){} public static Boss getBoss()
{
return boss;
}
}

懒汉式,存在线程安全问题,一般不用

public class Boss
{
private static Boss boss; private Boss(){} public static Boss getInstance()
{
if(boss==null)
{
boss= new Boss();
}
return boss;
}
}

懒汉式,使用加锁的方式解决线程安全问题

public class Boss
{
private static volatile Boss boss; private Boss()){} public static Boss getInstance()
{
if(boss==null)
{
synchronized(Boss.class)
{
if(boss==null)
{
boss= new Boss();
}
}
}
return boss;
}
}

使用静态内部类,在内部类中持有外部类的实例,从而实现懒加载,并保证线程安全性。

写法不太直观,不常用

public class Boss
{
private Boss(){} private static class BossHolder
{
private static final Boss boss = new Boss();
} public static Boss getInstance()
{
return BossHolder.boss;
}
}

终极写法!《Effective Java》中推荐的写法,使用枚举,干净利落!

public enum Boss
{
INSTANCE
}

Java实现单例模式的几种方式的更多相关文章

  1. Java实现单例模式的两种方式

    单例模式在实际开发中有很多的用途,比如我们在项目中常用的工具类,数据库等资源的连接类.这样做的好处是避免创建多个对象,占用内存资源,自始自终在内存中只有一个对象为我们服务. 单例对象一般有两种实现方式 ...

  2. python实现单例模式的三种方式及相关知识解释

    python实现单例模式的三种方式及相关知识解释 模块模式 装饰器模式 父类重写new继承 单例模式作为最常用的设计模式,在面试中很可能遇到要求手写.从最近的学习python的经验而言,singlet ...

  3. JAVA实现单例模式的四种方法和一些特点

    JAVA实现单例模式的四种方法和一些特点,需要的朋友可以参考一下     一.饿汉式单例类 复制代码 代码如下: public class Singleton  {      private Sing ...

  4. Java中创建对象的几种方式

    Java中创建对象的五种方式: 作为java开发者,我们每天创建很多对象,但是我们通常使用依赖注入的方式管理系统,比如:Spring去创建对象,然而这里有很多创建对象的方法:使用New关键字.使用Cl ...

  5. java产生随机数的几种方式

    java产生随机数的几种方式 一.在j2se里我们可以使用Math.random()方法来产生一个随机数,这个产生的随机数是0-1之间的一个double,我们可以把他乘以一定的数,比如说乘以100,他 ...

  6. Java读写文件的几种方式

    自工作以后好久没有整理Java的基础知识了.趁有时间,整理一下Java文件操作的几种方式.无论哪种编程语言,文件读写操作时避免不了的一件事情,Java也不例外.Java读写文件一般是通过字节.字符和行 ...

  7. JAVA解析XML的四种方式

    java解析xml文件四种方式 1.介绍 1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这 ...

  8. Java添加事件的四种方式

    Java添加事件的几种方式(转载了codebrother的文章,做了稍微的改动) /** * Java事件监听处理——自身类实现ActionListener接口,作为事件监听器 * * @author ...

  9. java解析xml的几种方式

    java解析xml的几种方式 DOM DOM的全称是Document ObjectModel,也即文档对象模型.在应用程序中,基于DOM的XML分析器将一个XML文档转换成一个对象模型的集合(通常称D ...

随机推荐

  1. 如何通过CRM解决公司业绩下滑的问题

    大部分公司都需要新客户的支持来维持市场和实现预期的目标.尽管销售部门一直在努力,但这种努力还是无法阻止业绩下降. 想要做到销售增长,不仅要取决企业的进步,还需要改掉使业绩下降的问题.小Z将从四个方面对 ...

  2. mitrproxy抓包微信小程序

    mitmproxy mitmproxy is a set of tools that provide an interactive, SSL/TLS-capable intercepting prox ...

  3. C++基于armadillo im2col的实现

    最近学习CNN,需要用到im2col这个函数,无奈网上没有多少使用armadillo的例子,而且armadillo库中似乎也没有这个函数,因此自己写了. im2col的原理网上一大把,我懒得写了. 1 ...

  4. 使用gulp搭建项目

    项目源码地址 前期准备工作 首先确保本机安装了 node gulp中文文档 安装 gulp 命令行工具 npm install --global gulp-cli 在项目目录下创建 package.j ...

  5. [刷题] 279 Perfect Squares

    要求 给出一个正整数n,寻找最少的完全平方数,使他们的和为n 示例 n = 12 12 = 4 + 4 + 4 输出:3 边界 是否可能无解 思路 贪心:12=9+1+1+1,无法得到最优解 图论:从 ...

  6. XSF /如何使用xrandr

    XSF /如何使用xrandr 西里尔·布鲁莱布瓦<kibi@debian.org> 目录 入门 什么是xrandr? xrandr是与XRandR 扩展名交互的命令行工具[请参阅x.or ...

  7. Linux_WEB访问控制示例(使用IPADDR类型)

    前言: WEB服务使用访问控制,可以控制IP.主机名.以及某个网段的IP去访问我们的WEB服务,从而加减少流量的访问 一.使用IP控制访问 1.在/var/www/html下创建一个可访问的测试页面 ...

  8. MongoDB(12)- 查询嵌入文档的数组

    插入测试数据 db.inventory.insertMany( [ { item: "journal", instock: [ { warehouse: "A" ...

  9. 使用Jekyll + GitHub Pages免费搭建个人博客

    使用Jekyll + GitHub Pages免费搭建个人博客 My Blog:无名の辈 | VectorX (vectorxxxx.github.io) Download Ruby:Download ...

  10. 华为MDC软件架构

    华为MDC软件架构 平台软件零层逻辑架构如下图,由基础层.功能层.应用层和服务层组成. 零层逻辑架构 从平台软件一层逻辑架构可以看出,MDC用了华为自研的越影操作系统.兼容Autosar标准的软件中间 ...