高端品牌型 营销型网站建设,新浪邮箱登录网页,24小时网站建设,手机网站类型1. 饿汉模式 -线程安全 在类加载时进行实例化#xff0c; 线程安全#xff0c;但会导致类加载时间变长。饿汉模式如果使用过多#xff0c;可能会对App启动耗时带来不利影响。 2. 懒汉模式 -线程不安全 没有加锁#xff0c; 因此线程不安全。 3. 两次判空 加同步锁 -线程不… 1. 饿汉模式 -线程安全 在类加载时进行实例化 线程安全但会导致类加载时间变长。饿汉模式如果使用过多可能会对App启动耗时带来不利影响。 2. 懒汉模式 -线程不安全 没有加锁 因此线程不安全。 3. 两次判空 加同步锁 -线程不安全 instance为null时加锁不为null时不加锁效率有提升但由于android编译优化有可能类未完成构造函数的调用 就已经将instance指向了分配的地址空间进而根据instance是否为空判断是否加锁不可靠导致线程不安全。 注意 这里加的是synchronizedSingleton.class字节码锁 因为class对象在工程启动后是唯一的。 4. volatile关键字两次判空 加同步锁 -线程安全 volatile关键字的作用是 禁止指令重排序保证多线程时每次访问该变量时 都从主内存中更新该变量在本线程中的本地副本。 volatile关键字两次判空 加同步锁才是懒汉模式实现单例的正确写法。通过加volatile关键字解决了android代码优化导致的指令重排问题确保每次判空都是有效的。同时通过字节码锁保证判空逻辑和对象创建过程不被其他线程抢占进而实现线程安全。