1、单例模式
单例模式有“饿汉模式”和“懒汉模式”两种写法,实际开发中用到基本都会是饿汉模式。这两种写法在面试中也经常被问到,
其中“懒汉模式”的写法还会涉及一些多线程并发的问题。
2、饿汉模式
饿汉模式的写法是一种线程安全的实现,代码如下:
package com.thread.study;
public class Singleton {
private static Singleton singleton = new Singleton();
private Singleton(){}
public static Singleton getInstance(){
return singleton;
}
}
3、懒汉模式1.0(锁粒度太大,影响性能)
package com.thread.study;
public class SingletonLasy1 {
private static SingletonLasy1 singleton = null;
private SingletonLasy1(){}
public static synchronized SingletonLasy1 getInstance(){
if(singleton == null){
singleton = new SingletonLasy1();
}
return singleton;
}
}
3.1懒汉模式1.1(减小锁粒度)
package com.thread.study;
public class SingletonLasy1 {
private static SingletonLasy1 singleton = null;
private SingletonLasy1(){}
public static SingletonLasy1 getInstance(){
if(singleton == null){
synchronized(SingletonLasy1.class){
if(singleton == null){
singleton = new SingletonLasy1();
}
}
}
return singleton;
}
}