class ExtractorReloader {

    Extractor getOrReload() {
        ExtractorModel model = extractorModelService.get(name);

        if (needsReload(model)) {

            synchronized (this) {
                if (needsReload(model)) {

                    this.lastSeen = model.getLoadedOn() + 1;
                    this.delegate = createExtractor(model);
                }
            }
        }

        return delegate;
    }

    public  ExtractorReloader(
            IExtractorModelService extractorModelService,
            IConnectorService connectorService,
            Map<String, IExtractorFactory> factories,
            ExtractorName name);

}