单例设计模式:
*单例类只有一个实例。
*单例类必须自己创建自己的唯一实例。
*单例类必须给所有其他对象提供这一实例
*单例分为饿汉试和懒汉式
- 懒汉式:
package com.nyist.Single;
/**
* Created with IntelliJ IDEA.
* User: 子玉
* Date: 2017-10-12
* Time: 20:38
* Description:单例设计模式_懒汉设计模式 懒就要付出代价,必然线程是相对来说是不安全的!!!
*/
public class GargageLazy {
private static GargageLazy instance;
/**
* 这个地方的线程是不安全的 如果说一个线程第一次访问的时候进入到了if语句很显然第一次是满足条件的,但是
* 根据多线程的特点,存在当他进入到if判断下面一句的时候有可能CPU的执行权被第二个线程抢去了,
* 所以说这样的话并不能满足单例的初衷,只能满足一个.所以说需要加锁,实现同步
* @return
*/
public static GargageLazy getInstance(){
synchronized(GargageLazy.class){//类的描述符为锁企标,同步代码块的效率并不高所以
if(instance == null){
synchronized (GargageLazy.class){
instance = new GargageLazy();
}
}
}
return instance;
}
private GargageLazy(){}
}
2.饿汉式
package com.nyist.Single;
/**
* Created with IntelliJ IDEA.
* User: 子玉
* Date: 2017-10-12
* Time: 20:33
* Description:单利模式__饿汉式 饿汉,可以形象的理解成饿的很,所以说对象先New出来,这也是和懒汉最
* 本质的区别!!(我就是这样记的!)
*/
public class GargageBox {
/**
* 私有化构造,对象不能随便的实例化,静态的访问,
*/
//静态的成员变量:先New出来一个
private static GargageBox instance = new GargageBox();
//得到私有的对象的方法
private GargageBox getInstance(){
return instance;
}
private GargageBox(){
}
}
饿汉和懒汉是单例两种典型的特点.线程安全的相对来说是饿汉模式.我记忆的方法和理解的部分都在注解的地方写的很清楚了.如果有什么错误,欢迎大家留言指正.希望一起进步.