JAVA初学者 为什么这个程序先执行完主线程再执行子线程?

按照书上给的代码输入后的到的结果不太一样

 public class Example8_2 {

    public static void main(String[] args) {
        WriteWordThread1 zhang;
        WriteWordThread1 wang;
        zhang = new WriteWordThread1("张晓红",200);
        wang = new WriteWordThread1("JamsKeven",100);
        zhang.start();
        for(int i=1;i<=8;i++){
            System.out.println("我是主线程中的语句");
        }
        wang.start();
    }
}

class WriteWordThread1 extends Thread{
    int n=0;
    WriteWordThread1(String s,int n){
        setName(s);
        this.n=n;
    }
    public void run(){
        for(int i=1;i<=8;i++){
            System.out.println("我是一个线程,我的名字是"+getName());
            try{
                sleep(n);
            }
            catch(InterruptedException e){}
        }
    }
}

结果如下
结果如下

多线程的执行顺序不可预料。不同的jvm,不同的环境,不同的机器,不同的操作系统,不同的调试方式,执行顺序可能不同,你和书上的不同很正常。

楼主代码运行图片
这个是不可预料的,但是大部分和楼主的情况一样!

因为字线程是主线程中的一个分支。

张晓红那个线程,休眠时间改短点就会和主线程交叉运行,休眠的太久了。
JamsKeven那个线程,会在主线程之后运行,因为它是在循环后才start的。

楼上已经解释了 我也是来水经验的

我也来水一下经验、。。。。。

其实也有一种办法,可以让子线程先执行,主线程后执行:使用Thread的join()等待所有的子线程执行完毕,主线程在执行

哪个线程抢到执行权就哪个线程执行,无法预料的

图片说明
同样线程也是有优先级的其取值范围是 1 (Thread.MIN_PRIORITY ) - 10 (Thread.MAX_PRIORITY ),默认情况下 NORM_PRIORITY(5),但是线程优先级不能保证线程执行的顺序,他执行的顺序非常以来开发环境平台

《java并发编程艺术》 前几天刚撸完

因为子线程调用了sleep且你将sleep放到了循环中,而且线程的执行本来就是无法预估的。
你将sleep去掉的话,出现交替输出的概率比较大