24小时热门版块排行榜    

CyRhmU.jpeg
查看: 348  |  回复: 2
本帖产生 1 个 程序强帖 ,点击这里进行查看

sangzhipei1178

新虫 (小有名气)

[求助] 用缓冲区实现消费者机制

用缓冲区实现生产者消费者问题,设置一个缓冲区 然后生产者生产的物品放进去 再由消费者从缓冲区中取走,如果缓冲区为空则消费者进程阻塞 等待 由生产者生产后 缓冲区不为空 才可取走,若缓冲区已满 则生产进程阻塞等待.要一个可以运行的java程序
回复此楼

» 猜你喜欢

石激声则鸣!人激志则宏!
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
回帖置顶 ( 共有1个 )

qqhegg

荣誉版主 (文坛精英)

珊瑚小美-----小元家的九妹

优秀版主优秀版主

【答案】应助回帖

★ ★
感谢参与,应助指数 +1
微尘、梦想(金币+2, 程序强帖+1): 好久不见,有心了,祝好~ 2011-12-16 12:13:49
sangzhipei1178(金币+70): xiexie 2011-12-19 23:43:25
看一下可不可以,找人帮你写的呵呵呵
package thread;

class ShareData   
{   
        private char c;     
        private boolean isProduced = false; // 信号量   
       
        public synchronized void putShareChar(char c)  // 同步方法putShareChar()   
        {   
                if (isProduced)     // 如果产品还未消费,则生产者等待   
                {     
                        try   
                        {   
                                wait();        // 生产者等待   
                        }catch(InterruptedException e){   
                                e.printStackTrace();   
                        }   
                }   
                this.c = c;     
                isProduced = true;   // 标记已经生产   
                notify();             // 通知消费者已经生产,可以消费   
        }   
       
        public synchronized char getShareChar()  // 同步方法getShareChar()   
        {   
                if (!isProduced)    // 如果产品还未生产,则消费者等待   
                {      
                        try   
                        {   
                                wait();       // 消费者等待   
                        }catch(InterruptedException e){   
                                e.printStackTrace();   
                        }     
                }   
                isProduced = false; // 标记已经消费   
                notify();            // 通知需要生产   
                return this.c;   
        }   
}  


class Producer extends Thread     // 生产者线程   
{     
        private ShareData s;   
        Producer(ShareData s)   
        {   
                this.s = s;   
        }   
        public void run()   
        {   
                for (char ch = 'A'; ch <= 'D'; ch++)   
                {   
                        try   
                        {   
                                Thread.sleep((int)(Math.random()*3000));   
                        }catch(InterruptedException e){   
                                e.printStackTrace();   
                        }   
                        s.putShareChar(ch);  // 将产品放入仓库   
                        System.out.println(ch + " is produced by Producer.";   
                }   
        }   
}


class Consumer extends Thread    // 消费者线程   
{   
        private ShareData s;   
        Consumer(ShareData s)   
        {   
                this.s = s;   
        }   
        public void run()   
        {   
                char ch;   
                do{   
                        try   
                        {   
                                Thread.sleep((int)(Math.random()*3000));   
                        }catch(InterruptedException e){   
                                e.printStackTrace();   
                        }   
                        ch = s.getShareChar();    // 从仓库中取出产品   
                        System.out.println(ch + " is consumed by Consumer. ";   
                }while (ch != 'D');   
        }   
}  

public class CommunicationDemo   
{   
        public static void main(String[] args)   
        {   
                ShareData s = new ShareData();   
                new Consumer(s).start();   
                new Producer(s).start();   
        }   
}
每天都是新的一天,每天上帝都会给你不同的惊喜
3楼2011-12-16 11:11:29
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通回帖

文俊点点

木虫 (著名写手)

【答案】应助回帖

感谢参与,应助指数 +1
人懒了·······不想写·······自己百度·······有问题我可以改·······
这是你所拥有的时间·····这是你所能改变的生活·········
2楼2011-12-15 08:39:47
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 sangzhipei1178 的主题更新
信息提示
请填处理意见