中兴面试题解一

1.手写单例模式:

 1).什么叫单例模式:

     单例模式 一种非常常见的设计模式最简单一种设计模式 singleTon .

单例设计模式 主要的设计方法懒汉式、饿汉式和登记式单例

  单例特点:

   单例类只有一个实例

   单例类必须自己创建自己的唯一的实例(只有私有构造器)

   其他类的对象访问这一唯一实例的方法

总结:单例模式确保单例类只有一个唯一的实例 并且自行实例化同时向整个系统提供获取这个实例的方法

解决: 全局使用的类被频繁的创建和销毁。


2).

1. 基于之上的特性 提出一种懒汉式方式产生单例 懒汉式只是基本满足这三种特性

缺点:这种设计模式明显在多线程条件下 产生线程不安全情况在并发的条件下产生很多个单例

public class SingleTon {

	private static SingleTon  singleTon=null;
	private SingleTon()
	{
		
	}
	public static SingleTon getSIngTon()
	{
		if(singleTon==null)
		return new SingleTon();
	}
}


3.双重验证: 为什么进行双重验证 当线程A、B运行 加锁的同步代码块的时候 B线程先得到锁 创建一个实例释放锁此时A获得锁如果不进行在一步的验证 发生线程A创建新的实例对象因此 不得不进行双重验证



4).延时加载 静态内部类:类部类加载是线程安全的 只有调用 外部类的getInsatnce()方法时候才会实例化一次instance这个内部类的静态代码块一次。

 Java机制 内部类Holder只有在getInsatnce()第一次调用时候才会加载 内部类加载的时候只会实例化一次instance并且是线程安全的

// 3.c采用静态类部类: Java机制 这种类部类在加载时候线程安全的 只有在加载时候实例化instance
	private static class Holder{
		static SingleTon instacnce=new SingleTon();
	}
	public static SingleTon getInstace()
	{
		return Holder.instacnce;
	}
2. 方式采用饿汉式的单例模式 是线程安全的 不同于懒汉式单例调用方法时候才创建实例 直接创建 static 静态实例

根据Java 虚拟机特性 对于静态变量 在类加载的初始化阶段进行加载 static 成员变量在只会加载一次。 类初始化就自行实例化 

private static SingleTon  singleTon=new SingleTon();
	private SingleTon()
	{
		
	}
	public static SingleTon getSIngTon()
	{
		return singleTon;
	}
	
总结:考虑都线程安全问题 一般采用饿汉式方式创建一个单例。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值