A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 姿_`态 高级黑马   /  2014-6-26 09:15  /  1195 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 姿_`态 于 2014-6-26 10:12 编辑

/*
  程序打印的是code和show交替。
  有一点不明白,就是主方法中,t1线程开启之后,把flag改为false,接下来,每次打印不都应该是show?
*/

class TicketDemo4
{
        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();
        }
}
class Ticket implements Runnable
{
        Object obj=new Object();
        private int tick=100;
        boolean flag=true;
        public void run()
        {
                if(flag)
                {
                        while (true)
                        {
                                synchronized(obj)
                                {
                                        if (tick>0)
                                        {
                                                try{Thread.sleep(10);}catch (Exception e){}
                                                System.out.println(Thread.currentThread().getName()+"code...."+tick--);
                                        }
                                }
                        }

                }
                else
                        while(true)
                {
                        show();
                }
               
        }
        public synchronized void show()
        {
                if(tick>0)
                {
                        try{Thread.sleep(10);}catch (Exception e){}
                        System.out.println(Thread.currentThread().getName()+"show...."+tick--);
                }
                        
        }
}

4 个回复

倒序浏览
本帖最后由 爨庚轩 于 2014-6-26 10:09 编辑
  1.        if(flag)
  2.                 {
  3.                         while (true)
  4.                         {
  5.                                 synchronized(obj)
  6.                                 {
  7.                                         if (tick>0)
  8.                                         {
  9.                                                 try{Thread.sleep(10);}catch (Exception e){}
  10.                                                 System.out.println(Thread.currentThread().getName()+"code...."+tick--);
  11.                                         }
  12.                                 }
  13.                         }

  14.                 }
复制代码

你看你这这段代码,flag为true 进入if语句之后,while是死循环,直到tick小于零该线程结束。flag变成false之后不会影响t1线程,因为t1一直在执行while循环,不会再去判断if语句,

评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1

查看全部评分

回复 使用道具 举报
谢谢哥们,一语点破,
回复 使用道具 举报
爨庚轩 发表于 2014-6-26 10:08
你看你这这段代码,flag为true 进入if语句之后,while是死循环,直到tick小于零该线程结束。flag变成false ...

谢谢哥们,一语点破
回复 使用道具 举报
爨庚轩 发表于 2014-6-26 10:08
你看你这这段代码,flag为true 进入if语句之后,while是死循环,直到tick小于零该线程结束。flag变成false ...

一针见血
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马