| 查看: 351 | 回复: 2 | ||
| 本帖产生 1 个 程序强帖 ,点击这里进行查看 | ||
sangzhipei1178新虫 (小有名气)
|
[求助]
用缓冲区实现消费者机制
|
|
| 用缓冲区实现生产者消费者问题,设置一个缓冲区 然后生产者生产的物品放进去 再由消费者从缓冲区中取走,如果缓冲区为空则消费者进程阻塞 等待 由生产者生产后 缓冲区不为空 才可取走,若缓冲区已满 则生产进程阻塞等待.要一个可以运行的java程序 |
» 猜你喜欢
导师想让我从独立一作变成了共一第一
已经有9人回复
博士读完未来一定会好吗
已经有23人回复
到新单位后,换了新的研究方向,没有团队,持续积累2区以上论文,能申请到面上吗
已经有11人回复
读博
已经有4人回复
JMPT 期刊投稿流程
已经有4人回复
心脉受损
已经有5人回复
Springer期刊投稿求助
已经有4人回复
小论文投稿
已经有3人回复
申请2026年博士
已经有6人回复

文俊点点
木虫 (著名写手)
- 应助: 30 (小学生)
- 金币: 2529.5
- 散金: 1796
- 红花: 1
- 帖子: 1151
- 在线: 500.1小时
- 虫号: 1219128
- 注册: 2011-03-02
- 性别: GG
- 专业: 文艺美学

2楼2011-12-15 08:39:47
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













回复此楼
;