question: public void start ( ) { JoinLock currentLock = lock ; JoinLock newLock ; synchronized ( currentLock ) { if ( currentLock . released ) newLock = lock = new JoinLock ( ) ; else newLock = currentLock ; } if ( daemon ) { synchronized ( daemon_threads ) { if ( daemon_threads . isEmpty ( ) ) { wrapper = new threadWrapper ( name , true ) ; } else { wrapper = ( threadWrapper ) daemon_threads . removeLast ( ) ; wrapper . setName ( name ) ; } } } else { wrapper = new threadWrapper ( name , false ) ; } if ( priority != wrapper . getPriority ( ) ) { wrapper . setPriority ( priority ) ; } wrapper . currentLock = newLock ; wrapper . start ( this , name ) ; }
target:  multiple invocations of start() are possible, but discouraged if combined with other thread operations such as interrupt() or join()