The Thread class has a constructor Thread(Runnable target), and Thread itself implements Runnable. Passing a Thread object as the Runnable target is valid syntax - it compiles and runs without error. The new Thread object wraps the existing Thread as its Runnable target.