黑马程序员技术交流社区
标题:
一点小疑惑
[打印本页]
作者:
风乐
时间:
2013-5-8 00:19
标题:
一点小疑惑
本帖最后由 风乐 于 2013-5-8 13:38 编辑
class Ticket implements Runnable
{
private int num = 100;
boolean flag = true;
public void run()
{
if (flag)
{
while (num>0) //为什么还是会出现0票呢
{
synchronized (this)
{
System.out.println(Thread.currentThread().getName()+"..."+num--);
}
}
}
else
{
while(num>0)
twosale();
}
}
public synchronized void twosale()
{
System.out.println(Thread.currentThread().getName()+"........."+num--);
}
}
class error2
{
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();
}
}
为什么打印结果会出现0票呢,num--不是先用再减么,那while(num>0)里打印结果,不应该不会出现0的结果么
作者:
刘兆华
时间:
2013-5-8 06:07
线程不安全导致 你把锁加错了 你应该放在While外面 我把代码给你发上来 你自己看看 。
class Ticket implements Runnable
{
private int num = 100;
boolean flag = true;
public void run()
{
if (flag)
{
synchronized (this)
{
while (num>0) //为什么还是会出现0票呢
{
System.out.println(Thread.currentThread().getName()+"..."+num--);
}
}
}
else
{
synchronized (this)
{
while(num>0)
{
System.out.println(Thread.currentThread().getName()+"........."+num--);
}
}
}
}
}
class test
{
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(1);
}
catch (Exception e)
{
}
t.flag = false;
t2.start();
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2