码迷,mamicode.com
首页 > 其他好文 > 详细

单例模式

时间:2019-10-24 15:21:05      阅读:54      评论:0      收藏:0      [点我收藏+]

标签:性能   就是   turn   自己的   存在   实例   初始   tin   内部类   

/**
* 饿汉式 在类加载时实现初始化,浪费内存
* 线程安全
* 用于访问量大,多线程访问
*
*/
public class Utils{
private static final Utils instanch=new Utils();

private Utils() {
}
public static Utils getInstance (){
return instanch;
}
}


/**
* 懒汉式 在调用时实现初始化
* 非线程安全
* 用于访问量少,单线程访问,多线程时可能会出现实例化多个对象
* eg:线程A,B同时执行到if (instance == null) { 中会有多个实例
*/
public class Utils {
private static Utils instance;

private Utils() {
}
public static Utils getInstance() {
if (instance == null) {
instance = new Utils();
}
return instance;
}
}

/**
* 懒汉式优化(DCL式) 在调用时实现初始化
* 非线程安全
* 用于访问量少,单线程访问,多线程时可能会出现实例化多个对象
* synchronized: 只允许一个线程进入特定代码段,从而避免多线程同时修改同一数据。费性能
* 可能存在 获取到空的instance eg:线程A执行到 getInstance 看的第2步(相当于半个对象因已有内存空间)线程B执行getInstance时会直接return instance;一个null对象
优化如下个方法
*/
public class Utils {
private static Utils instance;
private Utils() { //分3步 1 分配内存空间2,初始化对象,3设置内存地址到对象
}
public static Utils getInstance() {
if(instance==null){
synchronized (Utils.class){
if (instance == null) {
instance = new Utils();
}
}
}
return instance;
}
}


/**
* 懒汉式优化(DCL式) 在调用时实现初始化
* 非线程安全
* 用于访问量少,单线程访问,多线程时可能会出现实例化多个对象
* synchronized: 只允许一个线程进入特定代码段,从而避免多线程同时修改同一数据。费性能
* volatile :高并发时用volatile
* 使用volatile变量能够保证:
每次读取前必须先从主内存刷新最新的值。
每次写入后必须立即同步回主内存当中。
也就是说,volatile关键字修饰的变量看到的随时是自己的最新值。线程1中对变量v的最新修改,对线程2是可见的
*/

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

/**
* 使用时加载UtilsInSide 内部类,线程安全
*
*/
public class Utils {
public static Utils getInstance(){
return UtilsInSide.instance;
}
private static class UtilsInSide {
private static final Utils instance=new Utils();
}
}
 
 
 

单例模式

标签:性能   就是   turn   自己的   存在   实例   初始   tin   内部类   

原文地址:https://www.cnblogs.com/zhou2016/p/11732158.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!