这个引起效率问题的主要是synchronized引起的,因为每次进入同步代码块的时候,只允许一个线程进入,
其他的线程将都在等待那个进入同步代码块的线程执行完毕,再极端一点,如果已经在同步代码块的线程此时失去了CPU执行权,那么外面的线程将会等待更久,
而且不管单例对象是否已经实例化,都要每次进行等待,所以执行效率很低,
但是如果在同步代码块外面再加一个判断的话,如果判断到单例引用已经有对象的话,线程就不用走同步代码块里面的内容了,也就是说不用进行等待了,每个线程都可以进行判断,然后直接取得单例引用,而不用排队来取得引用. |