线程中的输出不是有序的

时间:2015-04-13 16:32:47

标签: java multithreading

public class MainClass {
    public static void main(String args[]){
        NewThread ob1 = new NewThread("One");
        NewThread ob2 = new NewThread("Two");
        NewThread ob3 = new NewThread("Three");

        try{
            System.out.println("Waiting for threads to finish.");
            ob1.t.join();
            ob2.t.join();
            ob3.t.join();
        } catch (InterruptedException e){
            System.out.println("Main thread interrupted");
        }

        System.out.println("Exiting main thread.");
    }
}
class NewThread implements Runnable {
    Thread t;

    NewThread(String name){
        t = new Thread(this, name);
        System.out.println("New thread: " + t);
        t.start();
    }

    public void run(){
        try{
            for(int i=3; i>0; i--){
                System.out.println(t.getName() + ": " + i);
                Thread.sleep(1000);
            }
        } catch (InterruptedException e){
            System.out.println(t.getName() + " interrupted.");
        }
        System.out.println("Exiting " + t.getName());
    }
}

上面的代码旨在提供此输出:

新帖子:主题[一,五,主]
新线程:线程[2,5,主]
新主题:线程[Three,5,main]
等待线程完成。
一:3
二:3
三:3
一:2
二:2
三:2
一:1 二:1 三:1 退出一个 退出两个 退出三 退出主线程。

相反,它输出如下:

新帖子:主题[一,五,主]
新线程:线程[2,5,主]
一:3
新主题:线程[Three,5,main]
二:3
等待线程完成。
三:3
三:2
一:2
二:2
三:1 二:1 一:1 退出两个 退出三 退出一个 退出主线程。

请帮我纠正代码。

1 个答案:

答案 0 :(得分:0)

由于您正在进行多线程处理,因此无法保证在不给予线程优先级高于其他线程的情况下将运行哪些订单线程。只是因为你希望你的输出按照一定的顺序,IMO,打败了多线程的目的。你可能还没有产生一个线程开始。对于" true"多线程,我希望你的输出像你所展示的那样混合在一起,但不能保证。