日期:2014-05-20  浏览次数:20775 次

生产者与消费者:Scala的Actor实现
如题

想要自己写个Demo模拟经典生产者消费者的线程并发问题

假设生产端速度较快,产品到一定数量时,停止生产

消费端速度较慢,在产品数量为0时,停止消费

郁闷的是, scala 的 actor 中 receive 貌似只是机械地等待,而不是像 java 中的阻塞

所以 生产者 和 消费者 两个线程如何通信,如何判断边界的问题,很纠结

我就暂时不贴自己的代码,希望有大牛来指点迷津,如何思考这个问题,建立清晰的线程模型,逻辑怎么走

随便说说,有分必给

------解决方案--------------------
你用 Scala 来写,还是 Java 来写?
------解决方案--------------------
我也会scala

不过原型设计和具体语言关系不是非常的大

如果有必要,可以离开语言来谈这个问题
------解决方案--------------------
我初学者,不知道scala,但我最近写过类似的程序,我用多线程。
线程1:(生产者,较快)
public void run(){
while(true){
if(ready){生产;}
else sleep(若干毫秒,这个值参考消费者时间,比其小得多,要自己调试);
}
}
线程2:(消费者,较慢)
public void run(){
Thread thread1 = new Thread1();//生产者线程
thread1.start();//启动生产者线程 
while(true){
boolean ready = false;
从生产者取产品;
消费。。。
boolean ready = true;
sleep(若干毫秒,这个值参考生产者时间,比其略大,要自己调试);
}
}
调用的后,只要启动线程2(消费者)即可。
------解决方案--------------------
你可以看看这篇
面向 Java 开发人员的 Scala 指南: 深入了解 Scala 并发性