Thread.join needs to be surrounded by a loop until it succeeds, as in Uninterruptibles.joinUninterruptibly.
Thread.join() can be interrupted, and so requires users to catch InterruptedException. Most users should be looping until the join() actually succeeds.
Suppress false positives by adding an
@SuppressWarnings("ThreadJoinLoop") annotation to the enclosing element.