public void generate() {
            if (random == null) {
                random = new Random();
            }
            locale = Locale.getDefault();

            // Faker uses non thread safe static collections so sync at the class level
//            synchronized (Faker.class) {
            faker = new Faker(locale, random);
//            }

            if (fieldDefinitions.isEmpty()) {
                throw new RuntimeException("No field definitions defined");
            }
            if (rowStreamConsumer == null) {
                throw new RuntimeException("No consumer defined");
            }
            if (dataWriter == null) {
                //default to CSV
                dataWriter = FlatDataWriterBuilder.defaultCsvFormat();
            }

            //convert our stream of data records into a stream of strings that possibly
            //includes adding things like header/footer rows, tags, delimiters, etc.
            final Stream<String> rowStream = dataWriter.mapRecords(fieldDefinitions, generateDataRows());

            // The consumers, e.g. file writers are likely not thread safe so make the stream sequential at this
            // point
            rowStreamConsumer.accept(rowStream.sequential());
        }
Holder class for the static class names list to allow for lazy initialisation
stroom-test-common/src/main/java/stroom/test/common/data/DataGenerator.java