谈到效率,当然要使用多线程!5个单例设计模式同时创建1亿个单例的耗时。
public class Client02 {
public static void main(String[] args) throws Exception{
long start = System.currentTimeMillis();
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 100000000; i++) {
Object o = Husband01.getWife();
}
}
});
t1.start();
t1.join();//等待线程执行完毕
long end = System.currentTimeMillis();
System.out.println("耗时:" + (end - start));
}
}
执行结果表
懒汉式:耗时:1998ms
饿汉式:耗时:44ms
双重锁:耗时:227ms
内部类:耗时:46ms
枚举:耗时:46ms
执行效率:饿汉式>内部类>枚举>双重锁>懒汉式
问:既然了解了安全性,效率,那么我们究竟该如何使用呢?
若单例对象占用资源少,不需要延迟加载,那么使用枚举好于饿汉式,因为枚举十分安全,耗时差不多。
若单例对象占用资源多,需要延迟加载,那么使用内部类好于懒汉式,耗时差距明显。
双重锁会产生其他问题,尽量避免使用。