单例模式指的是该类或者该方法某个部分只是初始化或者执行一次,因为Java中很多的对象需要分配资源,因此尽可能的将相同的对象只是一次初始化之后统一使用
比较明显的应用就是单例类,单例类只是初始化一次类获取类的实例即可,常用如下
上面使用同步是为了防止被多次初始化。
另外,在单例模式的应用中,有一种方式是双重检验,但是这个在多线程下还是容易多次执行,没有达到目的,因此,这里需要指出这种模式,直接看代码:
上面的test()方法就有可能存在多次初始化的情况,因为在help对象还没被创建的时候,可能有多个线程在争抢该对象锁,因此这样的模式是错的,其结果如下
(case 1)
当去掉Thread.sleep(1000)注释的时候的结果是:
(case 2)
说明在情况一中出现了race condition也就是没有实现单例
评论