I am having difficulty understanding the behavior of inner class threads.
I have this simple test program.
public class Test {
    private static Random rand = new Random(System.currentTimeMillis());
    public class TestThread extends Thread {
        @Override
        public void start() {
            System.out.println("in start " + Thread.currentThread().getName());
            try {
                Thread.sleep(rand.nextInt(5000));
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
    public static void main(String[] args){
        System.out.println(Thread.currentThread().getName());
        for(int i = 0; i < 5; ++i){
            new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        Thread.sleep(rand.nextInt(5000));
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    System.out.println(Thread.currentThread().getName());
                }
            }).start();
        }
        System.out.println("new run");
        Test test = new Test();
        for(int i = 0; i < 5; ++i){
            (test. new TestThread()).start();
        }
    }
}
When the first for loop runs, the threads behaves as I expected. Total of 6 threads, main, thread-0, thread-1, thread-2, thread-3, and thread-4. Thread 0 - 4 are printed out of order as I expected.
The result for second for loop has me confused.
system.out.println("in start " + Thread.currentThread().getName());
It always prints out "main," and the threads are executed sequentially. Why is the execution of the inner class thread carried out by the main thread?
Thanks!
 
     
    