黑马程序员技术交流社区

标题: 学习多线程遇到的问题 [打印本页]

作者: 姿_`态    时间: 2014-6-26 09:15
标题: 学习多线程遇到的问题
本帖最后由 姿_`态 于 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--);
                }
                        
        }
}


作者: 爨庚轩    时间: 2014-6-26 10:08
本帖最后由 爨庚轩 于 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语句,
作者: 姿_`态    时间: 2014-6-26 10:10
谢谢哥们,一语点破,
作者: 姿_`态    时间: 2014-6-26 10:11
爨庚轩 发表于 2014-6-26 10:08
你看你这这段代码,flag为true 进入if语句之后,while是死循环,直到tick小于零该线程结束。flag变成false ...

谢谢哥们,一语点破
作者: 尹兆国    时间: 2014-6-26 19:34
爨庚轩 发表于 2014-6-26 10:08
你看你这这段代码,flag为true 进入if语句之后,while是死循环,直到tick小于零该线程结束。flag变成false ...

一针见血




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