| 
 
| 本帖最后由 山里孩子 于 2015-3-23 23:43 编辑 
 在下面程序中,正确是两个都执行,但是试的话只执行线程1,不执行线程2.
 使用jdk1.8
 老师演示的两个都执行
 毕老师视频 :同步函数的锁是this
 
 
 复制代码class Ticket implements Runnable
{
        
        public int ticket = 100;
        Object obj = new Object();
        boolean flag = true;
        public void run()
        {
                //使用第一种方法
                if ( flag )
                {
                        synchronized(this)
                        {
                                while ( ticket > 0 )
                                {
                                        try{Thread.sleep(10);
                                                }catch(Exception e){}//异常处理
                                        System.out.println(Thread.currentThread().getName()+"  sales: ....."+ticket--);
                                }
                        }
                }
                else 
                        show();
        }
        //使用第二种方法调用 
        public synchronized void show()
        {
                while ( ticket > 0 )
                {
                        try{Thread.sleep(10);
                                }catch(Exception e){}//异常处理
                        System.out.println(Thread.currentThread().getName()+"  sales:"+ticket--);
                }
        }
}
class ThreadDemo4
{
        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();
        }
}
 
 
 
 
 | 
 |