| 楼上顶一个,楼主,假设现在有三个线程  我们来看怎样获取 Single 它的实例  。 那么 线程1  进入 进入获取实例方法  进了synchronized (Single.class)同步方法后获取实例  出了同步方法,
 线程2 继续进了同步方法发现实例不为空  出了同步方法,
 线程3  继续进了同步方法发现实例不为空  出了同步方法。
 按楼上的进行走一遍,
 线程1  进入获取实例方法  首先判断是否有 Single 它的实例。如果没有  进入synchronized (Single.class)同步方法 ,  同样再一次进入判断 没有 就获取 Single 它的实例。
 线程2   首先会判断是否有实例,如果有就不进synchronized (Single.class)同步方法 。
 线程3  同上。
 经过上边的分析,也就是说用楼上的方法,效率会高一些,那么会高在哪里?  我们首先来看  同步的机制,
 当一个线程进了同步的方法时,另一个线程只有等到  进入同步的线程走完了后才能 进去,大大影响了效率。
 ps.  真正运行的时候  不一定是按我所分析的线程1、线程2、线程3这个顺序来的,取决于电脑的cpu,但是流程基本差不多,  还有一点 , 就是 static  有这个修饰符说明在jvm加载 class是的时候就给他一份空间,不在堆区和栈区。同时也方便更好的调用,final ,就不用说了吧!
 |