单例模式
Posted colinzh
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单例模式相关的知识,希望对你有一定的参考价值。
模式定义
确保一个类只有一个示例,并提供一个全局的访问点。
示例
经典模式:多线程问题,多个线程处理时会可能有多个实例,懒汉式
/**
* 单例模式
*
* @author Colin
* @create 2018-04-25
**/
public class Singleton {
private static Singleton singleton;
private Singleton(){
}
public static Singleton getInstance(){
//线程1
if (singleton == null){
//线程2 多线程问题
singleton= new Singleton();
}
return singleton;
}
}
同步锁:每次获取示例时都要加锁,性能上会有影响。只要在第一次创建实例的时候加锁处理即可。懒汉式线程安全
/**
* 加锁的单例模式
*
* @author Colin
* @create 2018-04-25
**/
public class Singleton2 {
private static Singleton2 singleton;
private Singleton2(){
}
public static synchronized Singleton2 getInstance(){
if (singleton == null){
singleton= new Singleton2();
}
return singleton;
}
}
静态加载:如果对象比较大在类加载时就进行初始化,可能影响类的初始化速度。饿汉式
/**
* 单例模式
*
* @author Colin
* @create 2018-04-25
**/
public class Singleton1 {
private static Singleton1 singleton=new Singleton1();
private Singleton1(){}
public static Singleton1 getInstance(){
return singleton;
}
}
双重锁定:只在第一次初始化时加锁
/**
* 双重检查锁
*
* @author Colin
* @create 2018-04-25
**/
public class Singleton3 {
private static Singleton3 singleton3;
private Singleton3(){}
public static Singleton3 getInstance(){
if (singleton3 == null){
synchronized (Singleton3.class){
if (singleton3 == null){
singleton3=new Singleton3();
}
}
}
return singleton3;
}
}
以上是关于单例模式的主要内容,如果未能解决你的问题,请参考以下文章