private void requestChange(final Runnable changeAction) {
        commandLock.lock();
        try {
            changeCommandQueue.add(changeAction);
            if (!commandExecutionRunRequested && !isDestroyed.get()) {
                commandExecutionRunRequested = true;
                this.changeExecutor.runCommandChain(this.commandRunner);
            }
        } finally {
            commandLock.unlock();
        }
    }
replaces objects in this Map completely with given objects
<br>
Same effect could be reached by calling removeAll() followed by add(newObjects),
but performance is better when calling replace() method instead
main/src/main/java/cgeo/geocaching/utils/AsynchronousMapWrapper.java