为什么要写单例类了?
因为我们把构造器写成public进行修饰,其可以在任何条件下创建对象,但是在某些特殊情况下,对象只要创建一次就OK了,可如果我们对其没有约束,那么有些程序员就会想创建多少对象就创建多少对象,这样反而对其系统的性能造成了影响,JVM就会多次创建对象和销毁对象,就会对系统资源造成很大的浪费,这就是为什么要有到单例模式
注意:我说的这个单例类只是单例模式的实现方法之一
当然了,要想实现这个就要做到:
1.对构造方法私有化
2.在其类中写个方法来对构造方法进行操作,其方法特别要注意,因为我们的本质是提供个方法供外界操控,所以必须是public,还有就是因为那个时候,对象还没有创建了,多以必须要用static,要用类进行调用
3.那个还有类必须要缓存那个类的创建的对象,否则不知道其到底有没有创建对象,也就不能保证其只创建一个对象了,所以必须创建一个变量对其进行保存,因为这个变量要在那个操控创建对象的方法中使用,不过那时没有对象,所以必须要用static,同时为了不让外界进行访问,所以必须就用private进项修饰
代码如下:
ckage com.fan.danli;
public class Singleton {
private static Singleton instance;
private Singleton(){}
public static synchronized Singleton getInstance(){
if (instance==null){
instance=new Singleton();
}
return instance;
}
}
package com.fan.danli;
public class SingletonTest {
public static void main(String[] args) {
Singleton instance = Singleton.getInstance();
Singleton instance1 = Singleton.getInstance();
System.out.println(instance);
System.out.println(instance1);
System.out.println(instance==instance1);
}
}
运行结果:
com.fan.danli.Singleton@1b6d3586
com.fan.danli.Singleton@1b6d3586
true
注意:
在那个singleton类中,对那个操控创建对象的那个方法getInstance,对其进行synchronized对其进行线程的上锁,对于线程上锁,如何理解了?
其实线程上锁,举个例子吧
比如你在坐火车,火车上有很多人,你喝水喝多了,突然想上厕所了,厕所门开着了,你就去上了,你把厕所门锁住了,别人就上不成了,只有你上完了,别人才可以上厕所
其实在这个例子中,你就是个线程厕所就是系统的内存资源,那个线程上锁就是你这个线程,一直在占用资源,别的线程都用不成了这个厕所,只有你用完了,别人才可以用!