@Override
    public String get(String key) {
        addToDefaults(key, null);
        unrequestedParameters.remove(key);
        return data.get(key);
    }
@Test
    void testConcurrentExecutionConfigSerialization()
            throws ExecutionException, InterruptedException {

        final int numInputs = 10;
        Collection<String> input = new ArrayList<>(numInputs);

        for (int i = 0; i < numInputs; i++) {
            input.add("--" + UUID.randomUUID());
            input.add(UUID.randomUUID().toString());
        }

        final String[] args = input.toArray(new String[0]);

        final ParameterTool parameterTool = (ParameterTool) createParameterToolFromArgs(args);

        final int numThreads = 5;
        final int numSerializations = 100;

        final Collection<CompletableFuture<Void>> futures = new ArrayList<>(numSerializations);

        final ExecutorService executorService = Executors.newFixedThreadPool(numThreads);

        try {
            for (int i = 0; i < numSerializations; i++) {
                futures.add(
                        CompletableFuture.runAsync(
                                () -> {
                                    try {
                                        serializeDeserialize(parameterTool);
                                    } catch (Exception e) {
                                        throw new CompletionException(e);
                                    }
                                },
                                executorService));
            }

            for (CompletableFuture<Void> future : futures) {
                future.get();
            }
        } finally {
            executorService.shutdownNow();
            executorService.awaitTermination(1000L, TimeUnit.MILLISECONDS);
        }
    }