guava RateLimiter java
private volatile Object mutexDoNotUseDirectly; private Object mutex() { Object mutex = mutexDoNotUseDirectly; if (mutex == null) { synchronized (this) { mutex = mutexDoNotUseDirectly; if (mutex == null) { mutexDoNotUseDirectly = mutex = new Object(); } } } return mutex; }
結合volatile 內存語義this
這樣能確保指令不會被重排序,從而避免可能出現的空指針問題 指針