黑马程序员技术交流社区
标题:
这个多线程为什么会出现负数?
[打印本页]
作者:
liuhao_hm
时间:
2015-7-12 21:40
标题:
这个多线程为什么会出现负数?
本帖最后由 liuhao_hm 于 2015-7-12 22:35 编辑
class Ticket implements Runnable
{
private int num = 100;
boolean flag = true;
public void run()
{
if(flag)
{
while(true)
{
synchronized(this)
{
if(num>0)
{
try
{
Thread.sleep(10);
}
catch (Exception e)
{
}
System.out.println(Thread.currentThread().getName()+"..."+num--);
}
}
}
}
else
{
while(true)
{
show();
}
}
}
public synchronized void show()
{
try
{
Thread.sleep(10);
}
catch (Exception e)
{
}
System.out.println(Thread.currentThread().getName()+"..show.."+num--);
}
}
class SynFunctionLockDemo
{
public static void main(String[] args)
{
Ticket t = new Ticket();
Thread t1 = new Thread(t);
Thread t2 = new Thread(t);
t1.start();
try
{
Thread.sleep(10);
}
catch (Exception e )
{
}
t.flag = false;
t2.start();
}
}
复制代码
重写了N遍,只有一次运行的时候没有出现负数,其余都是运行的时候出现负数,实在找不到问题的所在了
作者:
liuhao_hm
时间:
2015-7-12 21:41
运行结果
QK1%[A38ASDMH)EM)T`ROL0.png
(69.85 KB, 下载次数: 12)
下载附件
2015-7-12 21:40 上传
作者:
为了理想而奋斗
时间:
2015-7-12 22:47
synchronized(类名.class试试)
{
作者:
为了理想而奋斗
时间:
2015-7-12 22:49
我收回我上楼的话,楼主。你这是死循环啊。
作者:
fmi110
时间:
2015-7-19 12:12
if(flag)
{
。。。。。。。
if(num>0)
}
else
{
while(true)
{
这里缺少跳出语句的判断 if(num>0)
show();
}
}
作者:
fmi110
时间:
2015-7-19 12:30
else语句中缺少判断为负值时不输出的语句
即 if(num>0)
如果线程刚好在第一个if语句被你终止,就不会出现负数了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2