谈到效率,当然要使用多线程!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
执行效率:饿汉式>内部类>枚举>双重锁>懒汉式
问:既然了解了安全性,效率,那么我们究竟该如何使用呢?
若单例对象占用资源少,不需要延迟加载,那么使用枚举好于饿汉式,因为枚举十分安全,耗时差不多。
扫描二维码关注公众号,回复:
1215983 查看本文章
若单例对象占用资源多,需要延迟加载,那么使用内部类好于懒汉式,耗时差距明显。
双重锁会产生其他问题,尽量避免使用。