| 查看: 371 | 回复: 2 | ||
| 本帖产生 1 个 程序强帖 ,点击这里进行查看 | ||
sangzhipei1178新虫 (小有名气)
|
[求助]
用缓冲区实现消费者机制
|
|
| 用缓冲区实现生产者消费者问题,设置一个缓冲区 然后生产者生产的物品放进去 再由消费者从缓冲区中取走,如果缓冲区为空则消费者进程阻塞 等待 由生产者生产后 缓冲区不为空 才可取走,若缓冲区已满 则生产进程阻塞等待.要一个可以运行的java程序 |
» 猜你喜欢
存款400万可以在学校里躺平吗
已经有22人回复
最失望的一年
已经有4人回复
拟解决的关键科学问题还要不要写
已经有7人回复
国自然申请面上模板最新2026版出了吗?
已经有19人回复
请教限项目规定
已经有3人回复
基金委咋了?2026年的指南还没有出来?
已经有10人回复
基金申报
已经有6人回复
推荐一本书
已经有13人回复
疑惑?
已经有5人回复
溴的反应液脱色
已经有7人回复

qqhegg
荣誉版主 (文坛精英)
珊瑚小美-----小元家的九妹
- 程序强帖: 2
- 应助: 10 (幼儿园)
- 贵宾: 3.115
- 金币: 23915.9
- 散金: 14806
- 红花: 179
- 沙发: 138
- 帖子: 11542
- 在线: 770.7小时
- 虫号: 1212338
- 注册: 2011-02-24
- 性别: MM
- 管辖: 基金申请交流
【答案】应助回帖
★ ★
感谢参与,应助指数 +1
微尘、梦想(金币+2, 程序强帖+1): 好久不见,有心了,祝好~ 2011-12-16 12:13:49
sangzhipei1178(金币+70): xiexie 2011-12-19 23:43:25
感谢参与,应助指数 +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
文俊点点
木虫 (著名写手)
- 应助: 30 (小学生)
- 金币: 2529.5
- 散金: 1796
- 红花: 1
- 帖子: 1151
- 在线: 500.1小时
- 虫号: 1219128
- 注册: 2011-03-02
- 性别: GG
- 专业: 文艺美学

2楼2011-12-15 08:39:47













回复此楼
;