Java: Como substituir automaticamente todos os valores em um mapa?

Eu tenho um bean com estado em um ambiente multiencadeado, que mantém seu estado em um mapa. Agora eu preciso de uma maneira de substituir todos os valores desse mapa em uma ação atômica.

public final class StatefulBean {

    private final Map<String, String> state = new ConcurrentSkipListMap<>();

    public StatefulBean() {
        //Initial state
        this.state.put("a", "a1");
        this.state.put("b", "b1");
        this.state.put("c", "c1");
    }

    public void updateState() {
        //Fake computation of new state
        final Map<String, String> newState = new HashMap<>();
        newState.put("b", "b1");
        newState.put("c", "c2");
        newState.put("d", "d1");

        atomicallyUpdateState(newState);
        /*Expected result
         *  a: removed
         *  b: unchanged
         *  C: replaced
         *  d: added*/
    }

    private void atomicallyUpdateState(final Map<String, String> newState) {
        //???
    }
}

No momento eu usoConcurrentSkipListMap como implementação de umConcurrentMap, mas isso não é um requisito.

A única maneira que vejo para resolver esse problema é tornar o mundostate volatile e substitua completamente o mapa ou use umAtomicReferenceFieldUpdater. Existe uma maneira melhor?

Minhas atualizações são bastante frequentes, uma ou duas vezes por segundo, mas têm poucos valores. Além disso, o mapa inteiro sempre conterá menos de 20 valores.

questionAnswers(5)

yourAnswerToTheQuestion