总结一下单例的写法,这万一面试官让手写单例,只知道大概是不行的。
//饿汉式
- public class Singleton {
- private static Singleton singleton = new Singleton();
- private Singleton(){
- }
- public static Singleton getInstance(){
- return singleton;
- }
- }
//懒汉式 线程不安全
- public class Singleton {
- private static Singleton singleton = null;
- private Singleton(){
- }
- public static Singleton getInstance(){
- if(singleton == null){
- singleton = new Singleton();
- }
- return singleton;
- }
- }
//懒汉式 加锁 线程安全
- public class Singleton {
- private static Singleton singleton = null;
- private Singleton(){
- }
- public static synchronized Singleton getInstance(){
- if(singleton == null){
- singleton = new Singleton();
- }
- return singleton;
- }
- }
//静态内部类
- public class Singleton {
- private Singleton(){
- }
- private static class SingleHolder{
- private static final Singleton singleton = new Singleton();
- }
- public static synchronized Singleton getInstance(){
- return SingleHolder.singleton;
- }
- }
//双重校验锁
- public class Singleton {
- private volatile static Singleton singleton = null;
- private Singleton(){
- }
- public static Singleton getInstance(){
- if(singleton == null)
- {
- synchronized (Singleton.class) {
- if(singleton == null)
- singleton = new Singleton();
- }
- }
- return singleton;
- }
- }
//枚举
- public enum Singleton {
- INSTANCE;
- public void whateverMethod(){
- }
- }