* 如何保证类在内存中只有一个对象呢?
* (1)控制类的创建,不让其他类来创建本类的对象。private
* (2)在本类中定义一个本类的对象。Singleton s;
* (3)提供公共的访问方式。 public static Singleton getInstance(){return s}
package com.heima.thread;
import java.security.SignatureException;
public class Demo1_Singleton {
/*
* 单例设计模式:一个类在内存中有一个对象
*
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
// Singleton s1=new Singleton();
/* Singleton s1=Singleton.s; //成员变量被私有,不能通过类名.调用
Singleton.s=null;
Singleton s2=Singleton.s;
System.out.println(s1==s2);*/
Singleton s1=Singleton.getInstance();
Singleton s2=Singleton.getInstance();
System.out.println(s1==s2);
}
}
//单列设计模式--饿汉式,推荐使用这种方式
class Singleton{
// 1.私有构造方法,其他类不能访问该构造方法
private Singleton() {
}
// 2.创建本类对象
private static Singleton s=new Singleton();
// 3.对外提供公共访问get方法
public static Singleton getInstance() {//获取实例
return s;
}
}
//单列设计模式--懒汉式,单列的延迟加载模式,多线程的时候会有问题
class Singleton{
// 1.私有构造方法,其他类不能访问该构造方法
private Singleton() {
}
// 2.声明一个引用
private static Singleton s;
// 3.对外提供公共访问方法
public static Singleton getInstance() {//获取实例
if(s==null) {
// 线程1,执行的时候,被抢只能等待,然后线程2,也进来等待,然后线程1执行,创建一个对象,线程2执行,又可以创建一个对象
s=new Singleton();
}
return s;
}
}
/*
* 饿汉式和懒汉式的区别:
* 1.饿汉式是空间换时间,懒汉式是时间换空间
* 2.在多线程访问,饿汉式不会创建对个对象,而懒汉式有可能创建多个对象
*/
class Singleton{
// 1.私有构造方法,其他类不能访问该构造方法
private Singleton() {
}
// 2.声明一个引用
public final static Singleton s=new Singleton();////final是最终的意思,被final修饰的变量不可以被更改
}