Java线程无序执行

时间:2016-07-07 18:09:42

标签: java multithreading

有时,Java中的主要方法似乎运行不正常。这是一个使用线程的示例。第二个线程首先执行(它们都作用于同步对象,因此第二个线程应该等到第一个线程完成,而不是先执行)。

public class Sync {
    public static void main(String[] args) {
        int a [] = { 1, 2, 3, 4, 5 };

        MyThread mt1 = new MyThread("Child #1", a);
        MyThread mt2 = new MyThread("Child #2", a);

        try {
            mt1.thread.join();
            mt2.thread.join();
        } catch(InterruptedException exc) {
            System.out.println("Main thread interrupted.");
        }
    }
}

我首先在IDE中运行代码,所以我认为这可能是问题,但在使用命令行时我得到了相同的结果。

1 个答案:

答案 0 :(得分:2)

我对你的问题的解释是你通过调用

来思考
try {
            mt1.thread.join();
            mt2.thread.join();
    }

在main函数中,您需要执行线程1,然后执行线程2.

然而,通过调用mt1.thread.join();在主线程中,它完成的所有操作都是暂停main函数的执行,直到mt1完成执行。这没有说明mt1是在mt2之前,之后还是同时执行。所有它可能确保主线程将首先等待mt1,然后等待mt2。