获得不同的线程顺序即使我运行我的程序

Nir*_*lam 2 java multithreading

谁能告诉我线程开始执行的顺序?我写了以下代码

class NewThread implements Runnable {
    Thread t;
    NewThread() {
        //creating a second thread.
        t=new Thread(this,"Demo Thread");
        System.out.println("Child Thread:"+t);
        t.start();
    }

    public void run() {
        try {
            for(int i=0;i<5;i++) {
                System.out.println("Child Thread:"+i);
                Thread.sleep(3000);
            }
        } catch(Exception e) {
            System.out.println(e.getLocalizedMessage());
        }
        System.out.println("Exiting Child Thread");
    }
}
Run Code Online (Sandbox Code Playgroud)

还有这个

public class ThreadDemo {
    public static void main(String args[]) {
        new NewThread();
        try {
            for(int i=0;i<5;i++) {
                System.out.println("Main Thread:"+i);
                Thread.sleep(3000);
            }
        } catch(Exception e) {
            System.out.println(e.getLocalizedMessage());
        }
        System.out.println("Exiting Main Thread");
    }
}
Run Code Online (Sandbox Code Playgroud)

当我执行此代码时,我得到许多不同的输出集.

Child Thread:Thread[Demo Thread,5,main]
Main Thread:0
Child Thread:0
Child Thread:1
Main Thread:1
Main Thread:2
Child Thread:2
Main Thread:3
Child Thread:3
Main Thread:4
Child Thread:4
Exiting Main Thread
Exiting Child Thread
Run Code Online (Sandbox Code Playgroud)

另一个,

Child Thread:Thread[Demo Thread,5,main]
Main Thread:0
Child Thread:0
Child Thread:1
Main Thread:1
Child Thread:2
Main Thread:2
Child Thread:3
Main Thread:3
Child Thread:4
Main Thread:4
Exiting Child Thread
Exiting Main Thread
Run Code Online (Sandbox Code Playgroud)

为什么会这样?线程顺序永远不会相同吗?如果有人可以给我指向线程和示例的基础知识,那就太好了.PS:我是线程的新手,这是我的第一个线程程序.提前致谢.

Gra*_*ray 8

当我执行此代码时,我得到许多不同的输出集.

这是预料之中的.订单未定义,并且在线程开始运行时受到竞争条件的影响,并且由OS进行线程调度.

我们编写多线程应用程序的全部原因是线程是异步的,并且出于速度原因在单独的处理器中运行.为了保证特定的输出顺序,您可以在具有锁等的线程之间进行同步,但是您将失去性能,并且分叉线程的整个原因将会减少.

  • 你能解释一下_为什么_你希望顺序是某种方式吗?线程的全部要点是在单独的处理器中并行运行,而不是与其他线程锁步。 (2认同)
  • 如果您打算编写多线程应用程序,除了少数特定的排序或不变量之外,您应该尽可能多地接受任意事件的顺序. (2认同)