单例模式
- 构造方法需要私有private,不要被外部访问(若外部能访问,就会被创建多个实例)
private OnlineTest() {
}
- 增加一个实例属性,设置为私有的private(不被外部访问,仅能通过调用方法获取实例)、静态的static(保证只有一份)、volatile(保证属性在加载/赋值的过程中,不会被JVM指令重排序)
private static volatile OnlineTest onlineTest;
- 提供一个获取实例的方法:
静态的static(保证可以直接通过类名访问,无需创建实例)
synchronized(加锁,解决并发问题。当onlineTest为空,才需要加锁;加锁后,还需判断onlineTest为空,再创建实例并赋值)
private static volatile OnlineTest onlineTest;
private OnlineTest() {
}
public static OnlineTest getInstance() {
if(onlineTest == null) {
synchronized (OnlineTest.class){
if(onlineTest == null) {
onlineTest = new OnlineTest();
}
}
}
return onlineTest;
}