1、静态常量
package com.hao.demo.design.singel;
/**
* @author haoxiansheng
* @date 2020-05-13
*/
public class SingletonTest1 {
public static void main(String[] args) {
Singelton1 instance1 = Singelton1.getInstance();
Singelton1 instance2 = Singelton1.getInstance();
System.out.println("instance1 => " + instance1.hashCode());
System.out.println("instance2 => " + instance2.hashCode());
}
}
// 饿汉式一 静态常量
/**
* 优缺点分析
* 1、优点:写法简单,就是在类装载的时候完成实例化,避免了线程同步问题(基于classloder机制)
* 2、缺点:在类装载过程的时候就完成了实例化。没有达到Lazy Loading 的效果。
* 如果一直没有使用这个实例造成资源浪费
*/
class Singelton1 {
/**
* 1、构造器私有
*/
private Singelton1() {
}
// 2、本类内部创建实例
private final static Singelton1 instance = new Singelton1();
// 3、提供一个公有的静态方法, 返回实例对象
public static Singelton1 getInstance() {
return instance;
}
}
2、静态代码块
package com.hao.demo.design.singel;
/**
* @author haoxiansheng
* @date 2020-05-13
*/
public class SingletonTest2 {
public static void main(String[] args) {
Singelton2 instance1 = Singelton2.getInstance();
Singelton2 instance2 = Singelton2.getInstance();
System.out.println("instance1 => " + instance1.hashCode());
System.out.println("instance2 => " + instance2.hashCode());
}
}
// 饿汉式二 静态代码块
/**
* 优缺点分析
* 1、优点:写法简单,就是在类装载的时候完成实例化,避免了线程同步问题(基于classloder机制)
* 2、缺点:在类装载过程的时候就完成了实例化。没有达到Lazy Loading 的效果。
* 如果一直没有使用这个实例造成资源浪费
*/
class Singelton2 {
/**
* 1、构造器私有
*/
private Singelton2() {
}
// 2、本类内部创建实例
private static Singelton2 instance ;
/**
* 3 在静态代码块中创建
*/
static {
instance = new Singelton2();
}
// 4、提供一个公有的静态方法, 返回实例对象
public static Singelton2 getInstance() {
return instance;
}
}