package com.fwd;
import java.io.IOException;
/**
* 单例模式3种创建方式
* @author fwd
* 2016年12月1日16:04:46
*
*饿汉式和懒汉式的区别:
*1饿汉式是空间换时间,创建对象浪费了内存空间,懒汉式时间换空间,做出判断浪费时间,需要的时候在创建节省空间
*2在多线程访问时,饿汉式不会创建多个线程,而懒汉式有可能会创建多个对象
*/
public class Demo1 {
public static void main(String[] args) throws IOException {
Singleton1 s = Singleton1.getInstance();
Singleton2 s2 = Singleton2.getInstace();
Singleton3 s3 = Singleton3.s;
}
}
/**
* 饿汉式
* @author fwd
*
*/
class Singleton1{
//私有构造方法
private Singleton1(){}
//上来就创建对象
private static Singleton1 s = new Singleton1();
//提供对方的访问方式
public static Singleton1 getInstance(){
return s;
}
}
/**
* 懒汉式
* @author fwd
* 懒汉式在多线程的使用中是有弊端的,在判断的时候有可能创建两次对象
* 所以就不是单例模式了,真正的开发中都是用饿汉式
* 这就是单例模式的延迟加载模式
*/
class Singleton2{
//私有构造方法
private Singleton2(){}
//声明一个引用
private static Singleton2 s;
//提供公共的访问方式
public static Singleton2 getInstace(){
if (s==null) {
//线程1等待, 线程2等待
s=new Singleton2();
}
return s;
}
}
class Singleton3{
//私有构造
private Singleton3(){}
//声明一个final修饰的 对象
public static final Singleton3 s = new Singleton3();
}
java中的3种方式创建的单例模式
最新推荐文章于 2024-08-08 08:19:30 发布