黑马程序员技术交流社区
标题:
while(true)和while(ticket>0)的区别,毕老师视频里的疑问。
[打印本页]
作者:
宋枢浩
时间:
2012-2-13 23:33
标题:
while(true)和while(ticket>0)的区别,毕老师视频里的疑问。
本帖最后由 宋枢浩 于 2012-2-14 17:14 编辑
class Ticket implements Runnable
{
private int ticket = 100;
public void run()
{
while (true)
{
if(ticket>0)
{
System.out.println(Thread.currentThread().getName()+"sale: "+ticket--);
}
}
}
}
class TicketDemo
{
public static void main(String[] args)
{
Ticket t = new Ticket();
Thread t1 = new Thread(t);
Thread t2 = new Thread(t);
Thread t3 = new Thread(t);
Thread t4 = new Thread(t);
t1.start();
t2.start();
t3.start();
t4.start();
}
}
复制代码
·······················································································
whille里面直接改成下面也可以运行。
while (ticket>0)
System.out.println(Thread.currentThread().getName()+"sale: "+ticket--);
······················
1,这个ture和ticket>0应该是等价的吧?
作者:
陈丹阳
时间:
2012-2-13 23:52
不等价。 对于该程序而言,
使用while (true) 当票卖完了线程依然没有终止,处于无限循环状态。
使用你的while (ticket>0),当票卖完了while循环结束,也就是run方法结束,从而线程终止了,程序停止。
作者:
成果
时间:
2012-2-13 23:53
while(true)是始终执行循环啊。if(ticket>0)是循环里面的判断啊。他的这个100张票有可能是卖完到99张。一个A线程停了(线程赌塞),另一个线程B还在卖。B线程卖了之后还有0张。此时若再恢复了A线程好了ticket此时为0还没更新。没票了当然不能再卖了。所以加了一个if(ticket>0)
作者:
李杨
时间:
2012-2-14 00:14
ture和ticket>0你说的这个等价问题,
while(true)和while(ticket > 0) 你应该好好分析分析,while(true)是永远成立永远循环下去,说白了就是死循环。而while(ticket > 0) 你里面是个条件表达式,用条件进行判断,判断就应该有两种情况一种是true另一个是false.
你仔细分析分析你的程序吧..不要慌,冷静的思考.
作者:
侯丽星
时间:
2012-2-14 08:26
while(true)和while(ticket > 0)不等价。
while(true)的意思是:这个程序块会一直运行,除非在命令行使用ctrl+c强制中断执行,否则它会一直运行下去的,也即它是无限循环。
而while(ticket > 0),意思是程序块满足ticket > 0才执行,否则不执行,程序继续执行while后面的语句,也即它是有限循环。
作者:
魏腾飞
时间:
2012-2-14 08:56
while(true)和while(ticket > 0)这两条语句有本质不同,虽然后者看起来十分有用,如果这样的话就不用产生任意的循环。在非同步的情况下,可能会出现的错误就很少。如果使用同步函数+while(ticket > 0)实际执行就一条语句,而使用了while(true)后,后面出现多条语句,在不同步的时候出现安全问题很正常更容易验证。
作者:
宋枢浩
时间:
2012-2-14 17:14
我也是想着true会一直执行。
那干嘛不直接写ticket<0。这样能自动结束。还能节省系统资源?
作者:
钟保罗
时间:
2012-2-14 21:17
不一样的,whille(ture)是这个循环一直的循环下去,只有在循环中有停止循环的语言才能停止,而while(ticket>0)是这个循环ticket>0这个条件满足的时候才会循环,一旦ticket>0这个条件不满足了,循环将会停止。你这里while (ticket>0)
System.out.println(Thread.currentThread().getName()+"sale: "+ticket--);也会运行是因为ticket等于100,大于0满足循环条件,所以就运行了。。。。。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2