Relearning Java Thread Primitives