好运飞艇怎么做代理_在面试通过通过单例模式来展示实例

  • 时间:
  • 浏览:0
  • 来源:小木博客 - 专注共享七月娱乐网分享

    在面试初级和高级开发时,一般会问设计模式的什么的问题。通常会让写下单例模式的实现土土法子,由于让结合项目,说下用过的设计模式,在本文里,就将讲述单例模式的多种写法,以此告诉一群人都歌词 要怎样在面试中展示实力。

    由于在项目里,多个运行实例前要从同有另四个 多配置文件里读取发送邮件的列表,越来越一群人都歌词 就可不还里能用单例模式来创建你本身读配置文件的类。一群人都歌词 先来看下单线程 情况下单例模式的写法。

1	public class MailListReader {
2	    private static MailListReader reader = null;
3	    private MailListReader(){}//构造函数私有
4	    //向结构开放有另四个



多公有的静态函数来提供对象
5	    public static MailListReader getInstance() {
6	        if(reader == null)
7	           reader = new MailListReader();
8	        return reader;
9	    } 
10	    //提供邮件列表的土土法子
11	     List<String> provideList()
12	     { 省略提供邮件列表的代码 }
13	}

    在上述的代码里,一群人都歌词 可不还里能看到实现单例模式的两大偏离 ,第一,第3行提供的构造函数是私有的,你本身你本身 结构代码就无法通过调用构造函数来创建MailListReader对象。第二,会通过诸如第5行的代码向外界提供read实例,因此 在你本身土土法子里,可不还里能可不还里能 当read对象为null时,才创建并返回该对象。

    由于多线程 是运行在单线程 环境下,越来越上述实现土土法子随便说说能满足单例的需求,但在多线程 的情况下,有另四个 劲有另四个 劲出现多个线程 共同调用getInstance土土法子,越来越就无法保证单例了。

    随便说说,一群人都歌词 可不还里能通过加synchronized来保证多线程 场景可不还里能可不还里里能 有另四个 多MailListReader对象被创建,代码改写如下。      

1	public class MailListReader {
2	    private static MailListReader reader = null;
3	    private MailListReader(){}//构造函数私有
4	     public static MailListReader getInstance() {
5	        Synchronized(MailListReader.class){
6	            if(reader == null)
7	               reader = new MailListReader();
8	        } 
9	        return reader;
10	    } 
11	    //省略提供邮件列表的土土法子 
12	}

    一群人都歌词 把第7行的new的动作中有 在第5行的Synchronized代码块里,你本身你本身 你本身new代码在同有另四个 多时间段可不还里能可不还里里能 被有另四个 多线程 调用,多个线程 共同到来前要有另四个 劲有另四个 劲出现排队的情况,你本身你本身 速率单位单位你本身低下。你本身你本身,一群人都歌词 还可不还里能通过如下的“双重检查”的土土法子来兼顾线程 安全和性能。      

1	public class MailListReader {
2	    private static MailListReader reader = null;
3	    private MailListReader(){}//构造函数私有
4	     public static MailListReader getInstance() {
5	        if(reader== null){
6	           synchronized (MailListReader.class){
7	             if(reader == null){
8	                 reader = new MailListReader ();
9	              }
10	            }
11	         }
12	         return reader;
13	    } 
14	    //省略提供邮件列表的土土法子 
15	}

    一群人都歌词 在getInstance土土法子里的第5和第7行有另四个 多地方通过有另四个 多if来检查,这你本身你本身“双重检查”。这里一群人都歌词 在加锁前做了有另四个 多否有为空的判断。通过你本身判断一群人都歌词 能看到了否有有其它线程 得到reader对象,你本身你本身 就可不还里能补救第6行的锁对象的操作,从而能补救多线程 排队的情况。

    一群人都歌词 完整性可不还里能通过你在项目中的实际案例,用单例模式来说明本人对设计模式的理解,因此 可不还里能由浅到深地有另四个 劲讲到“双重检查”土土法子,你本身你本身 面试官就能知道,你不仅知道你本身模式最基本的写法,还知道掌握要怎样在多线程 中应用的高级技能,更为重要的是,一群人都歌词 能通过实际案例,向面试官说明你不仅知道理论,而会应用。  

    此外,在讲完上述回答后,一群人都歌词 可不还里能再往如下有另四个 多方向扩展,第一可不还里能继续说,除了单例模式外,在一群人都歌词 项目里,还用到其它设计模式,因此 再结合案例说明,由于再围绕刚才单例模式里提到的线程 安全,再扩展出去说,除了在单例模式外,在一群人都歌词 项目里前要考虑其它的线程 并发因素,比如对你本身多线程 间都前要用的键值对缓存,一群人都歌词 是里装ConcurrentHashMap,(由于引出Lock,ThreadLocal等线程 相关话题),因此 再展开,你本身你本身 就可不还里能继续在本人熟悉的范围内回答什么的问题。

    一群人都歌词 可不还里能想象下,由于初级开发一方面照此说辞,很好地证明了设计模式方面的能力,本人面再通过准备加引导技术,不仅可不还里能展示基础技能 ,更能有效地展示诸如底层代码等技能,这对成功通过面试大有好处。