public static void put(RequestContext ctx, String key, @Nullable String value) {
        requireNonNull(ctx, "ctx");
        requireNonNull(key, "key");

        synchronized (ctx) {
            final Object2ObjectMap<String, String> oldMap = getMap(ctx);
            final Object2ObjectMap<String, String> newMap;
            if (oldMap.isEmpty()) {
                newMap = Object2ObjectMaps.singleton(key, value);
            } else {
                final Object2ObjectMap<String, String> tmp =
                        new Object2ObjectOpenHashMap<>(oldMap.size() + 1);
                tmp.putAll(oldMap);
                tmp.put(key, value);
                newMap = Object2ObjectMaps.unmodifiable(tmp);
            }
            ctx.setAttr(MAP, newMap);
        }
    }
Binds the specified request-scoped {@link MDC} property to the specified {@link RequestContext}.

@param ctx   the {@link RequestContext}
@param key   the key of the request-scoped {@link MDC} property
@param value the value of the request-scoped {@link MDC} property
core/src/main/java/com/linecorp/armeria/common/logging/RequestScopedMdc.java