黑马程序员技术交流社区
标题:
多线程讲解例子中关于标记的问题
[打印本页]
作者:
应国炎
时间:
2012-2-21 22:31
标题:
多线程讲解例子中关于标记的问题
本帖最后由 应国炎 于 2012-2-22 09:56 编辑
毕老师第11天13讲中
Ticket t =new Ticket();
Thread t1= new Thread(t);
Thread t2= new Thread(t);
t1.start();
t.flag=false;
t2.start();
----------------------------------
执行run中的代码
if(flag)*** else **
当执行到t.flag=false;后flag就一直是false了,那怎么还会交替执行if(flag)呢 ? 不解,谁能帮我讲一下
作者:
应国炎
时间:
2012-2-21 23:20
没有人知道吗?{:soso_e103:}
作者:
应国炎
时间:
2012-2-21 23:20
没有人知道吗?{:soso_e103:}
作者:
李晓俊老师
时间:
2012-2-21 23:39
我记得好像是在run方法的最后又把flag的值重新赋予为true的...
作者:
应国炎
时间:
2012-2-22 08:45
李晓俊 发表于 2012-2-21 23:39
我记得好像是在run方法的最后又把flag的值重新赋予为true的...
没有重新赋值true
作者:
应国炎
时间:
2012-2-22 08:59
class Tra implements Runnable//extends Thread
{
Object k=new Object();
private int tickets=100;
boolean flag=true;
public void run()
{
if(flag)
{
while(true){
synchronized(this)
{
if(tickets>0)
{
try{Thread.sleep(10);}
catch(Exception e){}
System.out.println(Thread.currentThread().getName()+">>true>>"+tickets--);
}
}
}
}
else
while(true)
show();
}
public synchronized void show()
{
if(tickets>0)
{
try{Thread.sleep(10);} catch(Exception e){}
System.out.println(Thread.currentThread().getName()+">>false>>"+tickets--);
}
}
}
public class Test
{
public static void main(String args[])
{
Tra a=new Tra();
Thread a1=new Thread(a,"a1");
Thread a2=new Thread(a,"a2");
a1.start();
try{Thread.sleep(10);}catch(Exception e){}
a.flag=false;
a2.start();
}
}
复制代码
就是这个代码,谁解释一下???
作者:
应国炎
时间:
2012-2-22 09:55
{:soso_e129:}我自己找到原因了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2