private boolean processQueue() {
            final long time = System.currentTimeMillis();
            Pair<K, Boolean> request;
            long processCnt = 0;
            while ((request = mapChangeProcessQueue.poll()) != null && !isDestroyed.get()) {
                if (request.second) {
                    //ADD request
                    processAddCommand(request.first);
                } else {
                    //REMOVE request
                    processRemoveCommand(request.first);
                }
                processCnt++;
                // removing and adding objects to maps are considered to be time costly operations
                // which might block UI thread
                // -> give the option to stop and recontinue at a later point in time
                if (!changeExecutor.continueMapChangeExecutions(time, mapChangeProcessQueue.size())) {
                    changeExecutor.onMapChangeBatchEnd(processCnt);
                    //queue the execution for a later point in time
                    changeExecutor.runMapChanges(this);
                    return false;
                }
            }
            changeExecutor.onMapChangeBatchEnd(processCnt);
            return true;
        }
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