```java
class ServiceLocator {
private static ServiceLocator instance = null;
private ServiceLocator() {}
public static ServiceLocator getInstance() {
if (instance == null) {
synchronized(ServiceLocator.class) {
instance = new ServiceLocator();
}
}
return instance;
}
public Engine getEngine() {
return new Engine();
}
}
class Car {
private Engine engine = ServiceLocator.getInstance().getEngine();
public void start() {
engine.start();
}
}
class MyApp {
public static void main(String[] args) {
Car car = new Car();
car.start();
}
}
其中下面这部分是什么意思?
if (instance == null) {
synchronized(ServiceLocator.class) {
instance = new ServiceLocator();
}
}
synchronized 是同步锁。保证在多线程下同一时刻只有一个线程访问当前代码块。
因为在并发环境下很可能出现多个ServiceLocator实例,要保证懒汉式单例的线程安全,即只能new ServiceLocator()执行一次。
通过对new ServiceLocator()的代码进行加锁,就能防止这个现象。
就是锁住这个类,保证在实例化时是唯一的
这个是懒汉式单例模式的实现。synchronized 关键字是为了锁住这个类,保证在并发情况下实例化的这个对象是唯一的