In Fetcher we currently use
Set<FetchItem> inProgress = Collections.synchronizedSet(new HashSet<FetchItem>());
as semaphore within the FetchItemQueues to keep track of the URLs being fetched and prevent threads from pulling from them. It works fine but we could use AtomicIntegers instead as all we need is the counts, not the contents.
This change would have little impact on the performance but would make the code a bit cleaner.