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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王晓斌 中级黑马   /  2013-1-21 08:50  /  2383 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王晓斌 于 2013-1-21 09:56 编辑

看毕老师视频中,死锁是直接加了两把锁形成的,可是谁能举个生活中可能死锁的例子~~~最好再附段代码。伪代码也行

6 个回复

倒序浏览
       嗯? 老毕的视频里也有讲到呀,比如A有一只筷子,B有一只筷子,俩人锁的机制都是等拿到两只筷子,吃下一口饭才放下手中的筷子,那两个人同时要吃东西的时候不就死锁了么~
       再举个例子,假如丈夫和妻子都要上网,家里只有一台电脑。如果丈夫是等妻子用完再用电脑,而妻子是要丈夫上他的qq,在农场偷菜之后才离开电脑,那不就死锁了么,相互等着了~
回复 使用道具 举报
老毕的筷子的例子太精辟了
回复 使用道具 举报
本帖最后由 陈丽莉 于 2013-1-21 09:16 编辑

     再比如搬寝室的时候,101要等102搬完空出来,再搬进去,102等103,而103等101,大家都等着对方搬了才开始搬东西,不沟通的话不就傻等着了~
     伪代码的话我试着写下吧:
   room101()
   {
         if(102为空)
              搬进102;
   }
    room102()
    {
          if(103为空)
              搬进103;
     }
     room103()
     {
          if(101为空)
               搬进101;
     }
      这不就锁住了么~  其实很好理解的,加油~!
回复 使用道具 举报
class Info {

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    private String name = "Rollen";
    private int age = 20;
}

/**
* 生产者
* */
class Producer implements Runnable{
    private Info info=null;
    Producer(Info info){
        this.info=info;
    }
     
    public void run(){
        boolean flag=false;
        for(int i=0;i<25;++i){
            if(flag){
                this.info.setName("Rollen");
                try{
                    Thread.sleep(100);
                }catch (Exception e) {
                    e.printStackTrace();
                }
                this.info.setAge(20);
                flag=false;
            }else{
                this.info.setName("chunGe");
                try{
                    Thread.sleep(100);
                }catch (Exception e) {
                    e.printStackTrace();
                }
                this.info.setAge(100);
                flag=true;
            }
        }
    }
}
/**
* 消费者类
* */
class Consumer implements Runnable{
    private Info info=null;
    public Consumer(Info info){
        this.info=info;
    }
     
    public void run(){
        for(int i=0;i<25;++i){
            try{
                Thread.sleep(100);
            }catch (Exception e) {
                e.printStackTrace();
            }
            System.out.println(this.info.getName()+"<---->"+this.info.getAge());
        }
    }
}

/**
* 测试类
* */
class hello{
    public static void main(String[] args) {
        Info info=new Info();
        Producer pro=new Producer(info);
        Consumer con=new Consumer(info);
        new Thread(pro).start();
        new Thread(con).start();
    }
}

运行从结果中看到,名字和年龄并没有对应,这就是线程同步的问题
回复 使用道具 举报

RE: 关于死锁

本帖最后由 王晓斌 于 2013-1-21 09:55 编辑
陈丽莉 发表于 2013-1-21 09:15
再比如搬寝室的时候,101要等102搬完空出来,再搬进去,102等103,而103等101,大家都等着对方搬了才 ...

懂了,之前还是因为理解的不透彻,想不到别的例子!非常感谢你的回答~~~
回复 使用道具 举报
黑马张英涛 发表于 2013-1-21 09:10
老毕的筷子的例子太精辟了

老毕好多经典的话:lol 建议写个毕老师经典语录,,哈哈

我就只说一个字...
那必须的么...
就这么简单...
...
...
...
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马