已采纳回答 / 福山润
代码1:两个线程同时走,他俩公用一个FlagSender对象里面的flag,当线程t1走第一遍时,flag等于false,不等待直接输出,然后将falg致成true,线程t1等待,这时候线程t2 while里面的!f.isFlag() 为false,所以往下进行输出又将flag致成false,这时线程t1又开始执行。以此类推。代码2:两个对象都在while里面进行死循环,所以只打印一次。
2017-02-04
已采纳回答 / bbug
java多线程可以近似看成同时执行,不过本质上计算机能同时工作的线程数是有限个的(取决于你的CPU)老师演示的时候农民军和隋军交替结果看起来应该是至少有两个线程是同时工作的。而你这个明显是仅分配给了这个程序一个线程。多线程是为了解决某些应用上需要等待其他的结果(比如浏览器访问一个网址需要等待服务器返回HTML文件才能继续执行显示页面的操作)才能继续执行,那么这段时间cpu可以去执行其他线程的程序。但是如果这个线程可以一口气执行下去的话,中途其他线程是没有办法执行的。-----------------以下是...
2017-01-04
已采纳回答 / 勤劳工作又不粘人的小妖精
线程只要启动之后不让他等待,就会执行一次代码循环后结束。但其中的过程并不是连续的,代码中指令执行一个while循环后,会释放系统资源使得其他线程有机会竞争系统资源,倘若当前线程休眠(等待),就不会再对资源进行争用,自然也就不会执行下一个while了。隋唐演义舞台stage就是这样,由于舞台休眠,不去争用系统资源,所以舞台的run()方法中指令就停止在sleep那个点,而剩下的隋军和农民军线程是活跃的,自然只能看到他们两个争用资源了。
2016-12-09
已采纳回答 / Askusity
Actor是Thread的子类,这是定义一个父类类型的引用指向一个子类的对象,如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法,如果子类中定义了父类中没有的方法是没办法执行的,这里呢,你可以理解为:Actor actor=new Actor();
2016-11-17
已采纳回答 / silencecorner
条件不满足时也就是其它线程还没有将数据写回(这里的lockObj是EnergySystem的final成员,用来标记EnergySystem,lockObj.wait()也就相当于EnergySystem实例.wait()),等待写入之后(也就是满足条件),执行逻辑代码,在唤醒其它线程(有可能还没有写入数据的)。可以回头看争用条件那节,有助于理解,我专门截了图。<...图片...>
2016-10-31