用Java实现两种单例模式并说明各自的优缺点

69 阅读1分钟

写法一: public class Test{ private static Test test(); public Test(); public static Test getInstance(){ return test; } }

写法一:当类被加载的时候,已经创建好了一个静态的对象,因此是线程安全的。但缺点是这个对象还没有被使用的时候就已经被创建出来了。

写法二: public class Test{ private static Test test=null; public Test(){ }; public static Test getInstance(){ if(test==null){ test=new Test(); } return test; } }

第二种写法,线程是不安全的,例如第一个线程执行语句if(test==null)时,第二个线程执行判断语句if(test==null),接着第一个线程执行判断语句test=new Test(),第二个线程也执行语句test=new Test(),在这种多环境下,可能会创建出两个对象。当然这种写法的优点是按需创建,只有在对象使用时才会被创建。