按照书上给的代码输入后的到的结果不太一样
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去掉的话,出现交替输出的概率比较大