单例模式也叫单件模式,就是确保一个类只有一个实例,并提供一个全局访问点。

设计成单例即把某个类设计成我们自己管理的单独实例,避免实例对象的重复创建,我们只有通过单例类的全局访问点获取实例。

下面来看金典的几种单例模式java代码实现:

1、饿汉模式

/**
* 饿汉模式(创建和运行负担小,占用内存小时使用)
* @author monkjavaer
* @date 2018/08/27 21:44
*/
public class Singleton1 { private static Singleton1 instance = new Singleton1();
private Singleton1(){}
public static Singleton1 getInstance(){
return instance;
} }

  

2、懒汉模式

/**
* 懒汉模式
* (懒汉模式并没有考虑线程安全问题,
* 在多个线程可能会并发调用它的getInstance()方法,
* 导致创建多个实例.)
* @author monkjavaer
* @date 2018/08/27 22:14
*/
public class Singleton2 {
private static Singleton2 instance ;
private Singleton2(){}
public static Singleton2 getInstance(){
if (instance ==null) {
instance = new Singleton2();
}
return instance;
}
}

  

3、懒汉模式处理多线程

/**
*
* 懒汉模式(处理多线程)synchronized同步会降低性能。
* @author monkjavaer
* @date 2018/08/27 22:21
*/
public class Singleton3 {
private static Singleton3 instance ;
private Singleton3(){}
public static synchronized Singleton3 getInstance(){
if (instance == null){
instance = new Singleton3();
}
return instance;
}
}

  

4、用“双重检查加锁”,在getIntance()中减少使用同步

/**
* 用“双重检查加锁”,在getIntance()中减少使用同步
* 利用双重检查加锁,首先检查是否实例已经创建,如果没有才同步。
* 这样只有第一次才会同步。
* @author monkjavaer
* @date 2018/08/27 22:28
*/
public class Singleton4 {
private volatile static Singleton4 instance; private Singleton4(){} public static Singleton4 getInstance(){
//如果实例不存在,进入同步区
if (instance == null){
//只有第一次才执行
synchronized (Singleton4.class){
//进入区块再检查一次
if (instance == null){
instance = new Singleton4();
}
}
}
return instance;
} }

最新文章

  1. druid配置数据库连接使用密文密码
  2. iOS隐私政策
  3. iOS初步开发
  4. 【代码笔记】iOS-16进制颜色与UIColor互转
  5. Linux如何学习
  6. js鼠标拖拽
  7. SPOJ 1739 Yet Another Equation(Pell方程)
  8. 网站繁简切换的JS遇到的一个BUG
  9. Making your local server accessible from anywhere
  10. linux 环境下java环境配置
  11. oracle 初探内存结构
  12. oracle 快照(snapshot) 管理
  13. JVM内存分配与回收策略
  14. LAMP分离搭建WordPress
  15. 【转】java提高篇之理解java的三大特性——多态
  16. sencha touch list ListPaging使用详解
  17. Web Api 的 路由机制
  18. POJ 1159 Palindrome(最长公共子序列)
  19. 使用位图文本工具BMFont从图片生成自定义字体
  20. Eclipse中用两个控制台测试网络通信程序

热门文章

  1. Q - Euclid in Manhattan(欧几里德距离==曼哈顿距离?)
  2. 为WebSphere Application Server v8.5安装并配置JDK7
  3. [译]Cookies Without Chocolate Chips
  4. 支持多种格式的播放器js代码
  5. LN : Eden Bitset_3
  6. iOS显示一张图片 Objective-C
  7. php经典bug
  8. 北大ACM(POJ1018-Communication System)
  9. Anniversary Cake
  10. Exception Information