62,614
社区成员
发帖
与我相关
我的任务
分享
Thread.sleep(1000);
改成Thread.sleep(600000);
运行看看数字绝对要打印6分钟左右,然后程序结束;还有你把Thread.sleep(1000);
这句代码去掉看看是不是什么也不会打印...怎么那么简单的东西你会那么坚决的认为flag=true不会被运行,I 服了 you!if(!flag)
while(true)
i++;
System.out.println(System.getProperty("java.vm.name"));
察看当前VM版本。主线程执行flag =TRUE之后,虽然执行完了 ,但是另外一个线程依然应该执行 ,因为他没有看到flag 的值的改变
子线程看不到呀( ⊙ o ⊙ )?晕...因为子线程在不断循环判断flag是不是为false,子线程执行时怎么会看不到flag为true呢?( ⊙ o ⊙ )!Thread.sleep(1000);
,你发现没有你把这句话写在了主线程里,并且是第一句,所以程序一定是最新执行Thread.sleep(1000);
这句,当CPU发现需要等待1秒时,它会把执行权交给子线程(该程序中就一个主线程,一个子线程),所以它会执行int i = 0; while(!flag)
System.out.println(i++);
;因为默认的flag是false,所以必然会执行打印那句代码,当执行了一会(差不多过了1秒,此时已打印了n行,计算机速度好快\(^o^)/~),cpu转而接着执行主线程flag = true;
,此时主线程结束,子线程因为flag=true了也执行结束....