In some cases the Output class in MultithreadedBatchItemSimilarities does not output all of the similarity pairs that it should. It is very possible for the number of active workers to go to zero while in the while loop, in which case the remaining similarities for the finished workers will not be flushed to the output. This is because the while loop is only conditioned on whether there are active workers or not. An easy fix is to also check to make sure the results structure is not empty. This way both the number of active workers must be 0 and the result set must be empty to exit the while loop.