黑马程序员技术交流社区

标题: 多线程讲解例子中关于标记的问题 [打印本页]

作者: 应国炎    时间: 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
  1. class Tra implements Runnable//extends Thread
  2. {
  3.         Object k=new Object();
  4.        
  5.         private int tickets=100;
  6.         boolean flag=true;
  7.         public void run()
  8.         {       
  9.                 if(flag)
  10.                 {
  11.                         while(true){

  12.                                                 synchronized(this)
  13.                                                         {
  14.                                                                 if(tickets>0)
  15.                                                                 {
  16.                                                                         try{Thread.sleep(10);}
  17.                                                                         catch(Exception e){}
  18.                                                                         System.out.println(Thread.currentThread().getName()+">>true>>"+tickets--);
  19.                                                                 }
  20.                                                         }
  21.                                                 }
  22.                 }
  23.                 else
  24.                         while(true)
  25.                         show();
  26.         }


  27.         public synchronized void show()
  28.         {
  29.                 if(tickets>0)
  30.                 {
  31.                         try{Thread.sleep(10);} catch(Exception e){}
  32.                         System.out.println(Thread.currentThread().getName()+">>false>>"+tickets--);
  33.                 }
  34.         }
  35. }






  36. public class Test
  37. {
  38.         public static void main(String args[])
  39.         {
  40.        
  41.                 Tra a=new Tra();
  42.                 Thread a1=new Thread(a,"a1");
  43.                 Thread a2=new Thread(a,"a2");
  44.                

  45.                 a1.start();
  46.                 try{Thread.sleep(10);}catch(Exception e){}
  47.                 a.flag=false;
  48.                 a2.start();
  49.         }
  50. }
复制代码
就是这个代码,谁解释一下???
作者: 应国炎    时间: 2012-2-22 09:55
{:soso_e129:}我自己找到原因了。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2