It seems that if one of these throws an exception, then that can crash your cleaning thread, since ```keepCleaning``` only catches InterruptedException. Either add a try catch here and in ```doCleanShuffle```, or within the while loop of ```keepCleaning```.