How Java Implements Its Thread Model