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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王红霞 中级黑马   /  2012-7-16 21:39  /  3714 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王红霞 于 2012-7-18 12:20 编辑

class Ticket implements Ruunable
{
        private int tick=100;
        Object obj=new Object();
        public void run()
        {
                while(ture)
                {
                   synchronized(obj)
                   {
                           if(tick>0)
                           {
                                   try(Thread.sleep(2);)catch(Exception e){}//既然线程是同步  为什么还要sleep?我觉得就算是有毕老师讲的例子的那种情况可是完全没必要加sleep啊?不用sleep不行吗?
                                   System.out.println(Thread.currentThread().getName()+".....sale:"+tick--);
                           }
                   }
                }
        }
}
class TicketDemo
{
        public static void main(String[] args)
        {
                Ticket t=new Ticket();
                Thread t1=new Thread(t);
                Thread t2=new Thread(t);
                Thread t3=new Thread(t);
                Thread t4=new Thread(t);
                t1.start();
               t2.start();
                t3.start();
                t4.start();
        }
}


评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1 呵呵 我开始也这么想的,后来到银行调度那.

查看全部评分

5 个回复

倒序浏览
郁闷  评分那里还不要我输入完
   我开始也这么觉得的  后来做那个银行调度系统的时候就知道这个很重要了,比如,你要保证每个客户只能被调用一次  就要用同步代码块了吧,但是当你模拟用户处理过程的时候就要用sleep了  这样两个就在一起了
  当时还纠结了好久才把它同步好的
回复 使用道具 举报
蒋映辉 发表于 2012-7-16 21:45
郁闷  评分那里还不要我输入完
   我开始也这么觉得的  后来做那个银行调度系统的时候就知道这个很重要了, ...

哦呵呵 银行系统我还没看到呢  现在看线程感觉sleep可以存在 就是没多大意义  那个视频我好好看看~~
回复 使用道具 举报
毕老师视频里加个sleep()是为了演示用的.
如果不加的话,你电脑里也会有其他的程序在获得cpu执行权后让那个synchronized进程暂停.
加上就看的更明显了
回复 使用道具 举报
try(Thread.sleep(2);)catch(Exception e){}   这句代码说白了是为了出效果,正常情况下要出现这种错误必须要票数为1时,要求一个线程通过判断之后,并且在执行tick--之前被冻结。你也知道线程运行的速度多么的快,要符合上述的条件需要多么大的巧合啊。如果不把这种巧合显示出来让大家看,怎么能让大家明白这里存在的安全隐患呢。所以毕老师在这里加了这一句,相当于把把“一个线程通过判断之后,并且在执行tick--之前被冻结”条件定义为true。
回复 使用道具 举报
sleep的作用就是触发操作立刻重新进行一次cpu的竞争,简单来说就是停止当前线程的执行。经过我刚才的测试,发现如果不用sleep的话可能会被同一个线程占用所有的资源。如果用了sleep就可以保证不同线程竞争到资源,也就是说每个客户端都可以访问到资源。所有说这个在模拟实际用户操作过程中非常必要的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马