Thread是一个类(class),Actor继承类的时候需要用 “extends”;
Runnable是一个接口(interface),Actress实现接口的时候用“implements”;
这里改成this.interrupt()
;
interrupted和interrupt是两个方法
在sleep过程中调用的中断方法,抛出了中断异常,所以不用sleep
没什么区别 , Thread类本质上也是实现了Runnable接口 , 由于类单继承以及接口多继承 , 推荐用Runnable接口 , 因为可能你的类需要继承别的类 , 不管是通过继承类还是实现接口来实现多线程 , 最终都是通过Thread的对象的API来控制线程的
应该new Actor(); new Thread();是错误的!!!
比如A有20能量,要传30能量给B,不满足,到wait set
但如果之后有别的空间传能量给A,那就可以满足了
打开你下载的压缩包不是有两个文件么,thread-in-imooc(也就是另外一个文件)里面有其他代码。
这就是人类或者说所有的生命体追逐探索的东西
中断就是中途停止,开车开到一半,主动停了下来,并不再行驶。
堵塞就是遇红灯,开车遇到红灯停止,红灯过后继续行驶。(sleep设置红灯时间)
放到前面就不会停止是指哪个线程不会停止
在线程的run()方法中的while循环没有停止
yieId方法只是让当前线程让出cpu,至于几次就随机了。看让出cpu前具体执行了几次就是几次。
好吧,因为我忘记实现接口了?
其实老师的代码如果在双方军队战斗那加上sleep()方法的话,你会发现:程咬金先战斗完之后才是军队执行完
因此个人觉得应该在程咬金出厂后加入一个判断,如下所示:
//新建关键人物 KeyPerson keyPerson = new KeyPerson(); Thread chengYaojin = new Thread(keyPerson,"程咬金"); while(true){ if(!suiThread.isAlive() && !farmThread.isAlive()){ System.out.println("程咬金开始战斗!!"); chengYaojin.start(); //chengYaojin.join(); System.out.println("大戏结束!!!"); break; } } chengYaojin.start(); chengYaojin.join(); System.out.println("大戏结束!!!"); break; } }
这样的话才能使得双方军队退场后,程咬金才会上场,才符合逻辑。
Actress类的位置错了
应该放在Actor类的外面
没错,感觉他太僵硬了,强行搞个能量系统,都被他搞得反而更难了
那不是快捷键,只不过是出错了,把鼠标放到出错信息那点击
我也这么觉得,没有体现出实际的意义
代码中用了yield的方法,该方法与sleep()类似,只是不能由用户指定暂停多长时间,并且yield()方法只能让同优先级的线程有执行的机会。但是不确定暂停时间