单例模式:保证一个类只有一个实例,并提供一个全局访问它的全局访问点。(可以让类没有其他实例,没法被其它类实例化,构造方法设置为为私有的)
public class Singleton {
private static Singleton singletont = null;
private Singleton(){}
public static Singleton getSingleton(){
if (singletont==null){
singletont=new Singleton();
return singletont;
}
return singletont;
}
}
public class test {
public static void main(String[] args) {
Singleton singleton1 = Singleton.getSingleton();
Singleton singleton2 = Singleton.getSingleton();
if (singleton1==singleton2){
System.out.println("ok");
}
}
}
===========
ok
多线程的单例实现我们可以用双重锁定、
public class ThreadSingleton{
private static volatile ThreadSingleton threadSingleton = null;
private ThreadSingleton(){}
public static ThreadSingleton getSingleton(){
if (threadSingleton==null){
synchronized (ThreadSingleton.class) {
if (threadSingleton == null) {
threadSingleton = new ThreadSingleton();
return threadSingleton;
}
}
return threadSingleton;
}
return threadSingleton;
}
}
第一个null是判断是否为null,不是的话直接返回,第二个null是为了防止等待线程,当前一个线程已经创建实例则等待的线程是不可以再以null的方式进来创建。