黑马程序员技术交流社区

标题: 请问大家 关于生产者消费者的问题 [打印本页]

作者: sepallen    时间: 2015-4-10 16:43
标题: 请问大家 关于生产者消费者的问题
本帖最后由 sepallen 于 2015-4-10 18:18 编辑

跟着毕老师视频练习代码发现程序执行不动了,不应该发生死锁吧?
代码如下:

package com.javastudy.cn;

public class Lesson25 {

        /**
         * @param args
         */
        public static void main(String[] args) {
               
                Reource r = new Reource();
               
                Producer pro = new Producer(r);
                Consumer con = new Consumer(r);
               
                Thread t1 = new Thread(pro);
                Thread t2 = new Thread(con);
                t1.start();
                t2.start();
        }
}
class Reource{
        private String name;
        private int count =1;
        private boolean flag = false;

        public synchronized void set(String name){
                if(flag)
                        try{wait();}catch(Exception e){}
                this.name = name+"--"+count++;
                System.out.println(Thread.currentThread().getName()+"生产"+this.name);
                flag = true;
                notify();
        }
        public synchronized void out(){
                if(!flag)
                        try{wait();}catch(Exception e){}
                System.out.println(Thread.currentThread().getName()+"消费。。。。"+this.name);
                flag = false;
                notify();
        }
}
class Producer implements Runnable{
        private Reource res;
        Producer(Reource res){
                this.res = res;
        }
        public void run(){
                while(true){
                        res.set("+商品+");
                }
        }
}
class Consumer implements Runnable{
        private Reource res;
        Consumer(Reource res){
                this.res = res;
        }
        public void run(){
                res.out();
        }
}


作者: 殷俊    时间: 2015-4-10 17:27
可能是几个线程都挂住了,醒不了
作者: sepallen    时间: 2015-4-10 17:35
殷俊 发表于 2015-4-10 17:27
可能是几个线程都挂住了,醒不了

不应该吧 一共只有两个线程 只能是一个唤醒另一个 不存在都挂起的情况吧?
作者: zouxx    时间: 2015-4-10 17:39
你多搞几个线程肯定挂啊!!!
作者: 殷俊    时间: 2015-4-10 18:03
sepallen 发表于 2015-4-10 17:35
不应该吧 一共只有两个线程 只能是一个唤醒另一个 不存在都挂起的情况吧? ...

额,看出问题了,你消费为什么没有while循环?不然的话,只消费一张票就完了,然后就醒不了了
作者: sepallen    时间: 2015-4-10 18:13
zouxx 发表于 2015-4-10 17:39
你多搞几个线程肯定挂啊!!!

现在就已经挂了 本不应该挂的
作者: sepallen    时间: 2015-4-10 18:15
殷俊 发表于 2015-4-10 18:03
额,看出问题了,你消费为什么没有while循环?不然的话,只消费一张票就完了,然后就醒不了了 ...

给力啊 谢了哥们
作者: 殷俊    时间: 2015-4-10 18:17
:handshake多多交流,共同进步




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