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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨华威 中级黑马   /  2012-3-19 15:47  /  1579 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Ticket implements Runnable
{
        private int tick = 100;
        boolean flag = true;
        public void run()
        {
                if(flag)
                {
                        while(true)
                        {
                                synchronized(this)
                                {
                                        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()+"...sale........:"+tick--);
                }
        }
}
class  BankDemo
{
        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();
        }
}
为什么结果看起来一个线程在运行?
Thread-0--code--:100
Thread-0--code--:99
Thread-0--code--:98
Thread-0--code--:97
Thread-0--code--:96
Thread-0--code--:95
Thread-0--code--:94
……
Thread-0--code--:5
Thread-0--code--:4
Thread-0--code--:3
Thread-0--code--:2
Thread-0--code--:1
我执行了好几次,都是Thread-0在运行。

2 个回复

倒序浏览
try{Thread.sleep(10);}catch(Exception e){}        你让主线程睡觉的时间就执行完了
回复 使用道具 举报
马云 发表于 2012-3-19 16:00
try{Thread.sleep(10);}catch(Exception e){}        你让主线程睡觉的时间就执行完了

电脑反应太快了?或者睡觉时间太长了?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马