正常应该是这种结果吧,最好贴上你的代码分析一下
https://www.cnblogs.com/dolphin0520/p/3920373.html
首先,线程会在把线程内代码全部跑完以后停止,这叫做正常停止。调用stop是强行停止,不推荐使用。这里使用了keeprunning = false,那么就会跳出while循环,然后继续进行while循环以下的剩余代码,等剩余代码跑完,线程内就没有代码可以跑了,于是该线程就自己停止了。换成别的情况也是一样,比如说你得线程里只有一个System.out.print(),那么在执行完这个打印任务后,线程就停止了,这种情况不需要keeprunning=false。这里使用keeprunning=false的目的只是让代码能够跳出while循环,并不是说所有线程内部都必须强制用一个keeprunning来让线程正常停止。
同问,我发现继承thread的代码并不能在线程之间传递值
因为执行 sleep() 的进程是主线程 Stage,目的是从两个军队启动线程开始
//启动线程,让军队开始作战 armyOfSuiDynasty.start(); armyOfRevolt.start();
到程咬金出现
System.out.println("正当双方激战正酣,半路杀出了个程咬金");
之间,留有时间给军队双方执行各自线程 run() 方法里的 for 循环。这个 Stage 线程里的 sleep() 方法对两个军队线程没有任何作用。所以,当 Stage 线程执行到
System.out.println("正当双方激战正酣,半路杀出了个程咬金");
和
System.out.println("程咬金的理想就是结束战争,使百姓安居乐业!");
之间时,两个军队的线程并没有被暂停,而是继续执行各自 for 循环里的内容。
启动了就必须运行一次吧,stop方法不是可以让其戛然而止么?、、
循环次数5次,仔细看代码
如果使用if 那么判断标记后,线程等待然后被唤醒 会直接执行下面的语句,但是可能这时条件是不成立的所以需要重新判断条件 使用while就可以重复判断标记
因为有join().
因为内部的for还没执行完啊。
哪个红色标志更狠,直接杀进程。