把舞台休眠Thread.sleep(50)去掉后,根本一次都没有调用隋军和农民军作战,这是为什么?
如下图所示,调用的两个线程while循环都没有运行,难度是因为KeepRunning直接为false吗?但是从显示的执行顺序来看,应该false传入是在后面。求解答
如下图所示,调用的两个线程while循环都没有运行,难度是因为KeepRunning直接为false吗?但是从显示的执行顺序来看,应该false传入是在后面。求解答
2017-01-04
java多线程可以近似看成同时执行,不过本质上计算机能同时工作的线程数是有限个的(取决于你的CPU)
老师演示的时候农民军和隋军交替结果看起来应该是至少有两个线程是同时工作的。而你这个明显是仅分配给了这个程序一个线程。
多线程是为了解决某些应用上需要等待其他的结果(比如浏览器访问一个网址需要等待服务器返回HTML文件才能继续执行显示页面的操作)才能继续执行,那么这段时间cpu可以去执行其他线程的程序。但是如果这个线程可以一口气执行下去的话,中途其他线程是没有办法执行的。
-----------------以下是针对代码的--------------------------
你只有一个线程能同时工作。那么两个军队的线程启动后是处于等待状态的,并没有真的执行。
然后舞台线程没有看见sleep(就是你删去的那个)所以继续执行下去,输出,关键人物的生命,设置名字,再一个输出,然后直接就执行到了keeprunning=false的两句。
再之后看见sleep,关键人物线程和两个军队线程争用cpu,不过两个军队线程即使争用到cpu也会因为keeprunning导致线程直接结束,那么舞台线程休眠的时间(这个是确定的值,没到的话再找个线程执行)就只有关键人物有输出操作,关键人物操作以后舞台线程也到了时间的话,舞台线程占用cpu,继续执行。
java初学,为个人理解所得,dalao请轻喷
举报