为什么我的多线程Java代码不能提供顺序输出?

时间:2014-03-06 16:19:08

标签: java multithreading

我最近开始学习多线程。我尝试了以下代码:

class AThread extends Thread {
    int input;

    public AThread(int y) {
        input=y;
    }

    public void compute() {
        System.out.println(input*input);
    }

    public void run() {
        compute();
    }
}

public class ThreadDemo {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        AThread a=new AThread(1);
        AThread b=new AThread(2);
        AThread c=new AThread(3);
        a.start();
        b.start();
        c.start();
    }
}

输出

有时我会

4
1
9

但其他时候,

1
9
4

为什么会这样?我还是个菜鸟。请按我的标准回答。

3 个答案:

答案 0 :(得分:9)

因为这是多线程的原因:并行处理;除非您手动同步,否则未指定线程的相对顺序。

这是在你的书中。

答案 1 :(得分:0)

你一次做多件事。除非您手动同步,否则未指定CPU执行的顺序。

答案 2 :(得分:0)

当您创建新Thread并启动它们时,您将执行顺序保留到JVM(Java虚拟机 - 所有Java程序运行的环境)。这类似于操作系统层的分叉过程。您放弃了对顺序处理的任何控制,并且作业调度程序允许各种线程/进程在其认为合适时占用CPU时间。