单例模式
1.饿汉式即静态初始化的方式,它是类一加载就实例化的对象,所以要提前占用系统资源。 2.懒汉式,面临着多线程访问的安全性问题,需要做双重锁定才能保证安全。 3.饿汉式的单例类已经足够满足我们的需求 饿汉式(推荐) 优点 1.线程安全 2.在类加载的同时已经创建好一个静态对象,调用时反应速度快 缺点 资源效率不高,可能getInstance()永远不会执行到,但执行该类的其他静态方法或者加载了该类(class.forName),那么这个实例仍然初始化 懒汉式:单例实例在第一次被使用时构建,延迟初始化。 优点: 避免了饿汉式的那种在没有用到的情况下创建事例,资源利用率高,不执行getInstance()就不会被实例,可以执行该类的其他静态方法。 缺点: 懒汉式在单个线程中没有问题,但多个线程同事访问的时候就可能同事创建多个实例,而且这多个实例不是同一个对象,虽然后面创建的实例会覆盖先创建的实例,但是还是会存在拿到不同对象的情况。解决这个问题的办法就是加锁synchonized,第一次加载时不够快,多线程使用不必要的同步开销大。 以下都是单例模式的经典使用场景: 1.资源共享的情况下,避免由于资源操作时导致的性能或损耗等。如上述中的日志文件,应用配置。 2.控制资源的情况下,方便资源之间的互相通信。如线程池等。 应用场景举例: 1.外部资源:每台计算机有若干个打印机