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);
}

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 ) ; }
multiple invocations of start ( ) are possible , but discouraged if combined with other thread operations such as interrupt ( ) or join ( )
