并发或顺序?

use*_*330 6 java concurrency multithreading

我正在玩Java中的Threads.
我在网站上找到以下示例:

public class ThreadTest {

    public static void main(String args[]) {
        Thread t1 = new Thread(new Thread1());
        t1.start();

        Thread t2 = new Thread(new Thread2());
        t2.start();
    }

}

public class Thread1 implements Runnable {

    @Override
    public void run() {
        for (int i = 0; i < 20; i++) {
            System.out.println(new java.util.Date());
        }
    }

}

public class Thread2 implements Runnable {

    @Override
    public void run() {
        for (int i = 0; i < 20; i++) {
            System.out.println(i);
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

预期的结果将是这样的:

Mon Nov 11 20:06:12 CET 2013
0
1
2
3
4
5
6
7
8
9
Mon Nov 11 20:06:12 CET 2013
10
Run Code Online (Sandbox Code Playgroud)

但我得到:

0
1
2
3
...
19
Mon Nov 11 20:06:12 CET 2013
Mon Nov 11 20:06:12 CET 2013
Mon Nov 11 20:06:12 CET 2013
...
Mon Nov 11 20:06:12 CET 2013
Run Code Online (Sandbox Code Playgroud)

所以它似乎不是并发的而是顺序的.是因为速度吗?

sab*_*ver 3

创建第二个线程比第一个线程需要更多的时间来完成。做这个:

public class ThreadTest {

   public static void main(String args[]) {
       Thread t1 = new Thread(new Thread1());
       Thread t2 = new Thread(new Thread2());
       t1.start();
       t2.start();
   }

}

public class Thread1 implements Runnable {

   @Override
   public void run() {
       for (int i = 0; i < 200000; i++) {
            System.out.println(new java.util.Date());
        }
    }

}

public class Thread2 implements Runnable {

    @Override
    public void run() {
        for (int i = 0; i < 200000; i++) {
           System.out.println(i);
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

如果有疑问,请使用 Integer.MAX_VALUE 而不是 200000。