1. 作用:
在应用程序中保证最多只能有一个实例.
2. 好处:
- 提升运行效率.
- 实现数据共享. 案例:application 对象
3. 懒汉式
(1)对象只有被调用时才去创建.
(2)由于添加了锁,所以导致效率
package com.ouc;
public class SingleTon {
//由于对象需要被静态方法调用,把方法设置为static
//由于对象时static,必须要设置访问权限修饰符为private,如果public可以直接调用,不访问访问入口
private static SingleTon singleTon;
/**
* 构造方法私有化,其他类不能实例化这个对象
* 对外提供一个访问入口
*/
private SingleTon(){};
/**
* 实例方法必须通过对象来调用
* 设置方法为静态方法
*
* 多线程访问下,可能出现if同时成立的情况,造成同时创建对象,需要添加锁
* @return
*/
public static SingleTon getInstance() {
if(singleTon==null){
synchronized (SingleTon.class) {
//双重验证
if(singleTon=-=null){
singleTon = new SingleTon();
}
}
}
return singleTon;
}
}
测试:
package com.ouc;
public class Test {
public static void main(String[] args) {
SingleTon singleTon = SingleTon.getInstance();
SingleTon singleTon1 = SingleTon.getInstance();
System.out.println(singleTon==singleTon1);
}
}
结果:
4. 饿汉式
解决了懒汉式中多线程访问可能出现同一个对象和效率低问题
package com.ouc;
public class SingleTon {
//类加载时进行实例化
private static SingleTon singleTon = new SingleTon();
private SingleTon(){};
public static SingleTon getInstance() {
return singleTon;
}
}