private static LongSet loadKnownItemIDs( String generationPrefix, ALSModelDescription modelDescription, final Generation generation, Collection<Future<Object>> futures, ExecutorService executor) throws IOException { final LongSet loadedIDs = new LongSet(); String knownItemsPrefix = generationPrefix + modelDescription.getKnownItemsPath(); for (final String knownItemFilePrefix : Store.get().list(knownItemsPrefix, true)) { futures.add( executor.submit( new Callable<Object>() { @Override public Void call() throws IOException { for (String line : new FileLineIterable(Store.get().readFrom(knownItemFilePrefix))) { int tab = line.indexOf('\t'); Preconditions.checkArgument( tab >= 0, "Bad input line in %s: %s", knownItemFilePrefix, line); long userID = Long.parseLong(line.substring(0, tab)); LongSet itemIDs = stringToSet(line.substring(tab + 1)); Lock writeLock = generation.getKnownItemLock().writeLock(); LongObjectMap<LongSet> knownItems = generation.getKnownItemIDs(); writeLock.lock(); try { knownItems.put(userID, itemIDs); loadedIDs.add(userID); } finally { writeLock.unlock(); } } log.info("Loaded known items from {}", knownItemFilePrefix); return null; } })); } return loadedIDs; }