synchronized在这里是什么意思?



```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 关键字是为了锁住这个类,保证在并发情况下实例化的这个对象是唯一的