在Java编程语言中,单例是常见的设计模式之一。单例即指某一个类在整个程序中只有一个实例对象。单例可以被用作配置文件、线程池、数据库连接池等。下面我们来看一下如何实现一个单例类。
public class Singleton { private static Singleton instance; private Singleton(){} //私有化构造函数 public static Singleton getInstance(){ if(instance == null){ instance = new Singleton(); } return instance; } }
以上代码中,我们通过构造函数将Singleton私有化,避免了其他类通过直接的类构造器来生成新的实例。此外,我们通过getInstance()方法来获取单例类的唯一实例。在getInstance()方法中,如果instance为null,则我们会生成一个新的实例,否则我们实例化的对象已经被创建,直接返回现有的实例即可。这种方法实现的单例是懒加载的,即用到的时候才创建实例,可以避免启动时就创建实例,节省资源。
此外,在单线程中,我们可以使用以上代码实现,但是在多线程中需要对getInstance()方法进行改进。我们需要在其中加入synchronized关键字,避免多个线程同时访问getInstance()方法,从而导致生成多个实例的可能性。
public class Singleton { private static Singleton instance; private Singleton(){} //私有化构造函数 public static synchronized Singleton getInstance(){ //在方法上加synchronized关键字 if(instance == null){ instance = new Singleton(); } return instance; } }
以上代码中,我们在getInstance()方法上加入了synchronized关键字,避免了多个线程同时进入getInstance()方法的可能性。这种方法是线程安全的。