@Override
    public FlowExecutionKey getKey(final FlowExecution execution) {
        try {
            if (webflowProperties.getSession().isPinToSession()) {
                recordWebflowSessionPinningInfo(execution);
            }
            val state = new SerializedFlowExecutionState(execution);
            return new ClientFlowExecutionKey(determineTranscoder().encode(state));
        } catch (final Exception e) {
            throw new ClientFlowExecutionRepositoryException("Error encoding flow execution", e);
        }
    }
Client flow storage has not backing store independent from the flow key, so no locking is required.
core/cas-server-core-webflow-api/src/main/java/org/apereo/cas/web/flow/executor/ClientFlowExecutionRepository.java