谁能帮我解决这个问题

一组生产者进程和一组消费者进程共享九个缓冲区,每个缓冲区可以存放一个整数。生产者进程每次向一个缓冲区写入整数,消费都进程每次从缓冲区取出一个整数。请用信号量和P、V操作,写出能够正确执行的程序。

import javax.swing.JApplet;
public class NumberPC extends JApplet
{
/**
*
*/
private static final long serialVersionUID = 1L;
NumStore numStore=new NumStore();//两个线程的共享对象
ProducerThread producerThd=new ProducerThread();//生产者进程
ConsumerThread consumerThd=new ConsumerThread();//消费者进程
boolean haveNum=false;//指示是否有数据。true为有
public void start()//启动生产者消费者进程
{
producerThd.start();
consumerThd.start();
}
public void stop()//停止生产者消费者进程
{
haveNum=false;//使线程内部的while终止
if(producerThd!=null) producerThd=null;//停止生产者进程
if(consumerThd!=null) consumerThd=null;//停止消费者进程
}
class NumStore
{
int numData;
public synchronized void putNum(int n)//放入数据的同步方法
{
while(haveNum==true)//消费者还未取走数据,则等待
{
try
{
wait();//进入睡眠,并释放管程
}catch (InterruptedException e){}
}
numData=n;
haveNum=true;//表示已生成新数据
notify();//唤醒正等待的消费者进程取走数据
}
public synchronized int getNum()
{
while(haveNum==false)
{
try
{
wait();
}catch(InterruptedException e){}
}
haveNum=false;
notify();
return numData;
}
}
class ProducerThread extends Thread//生产者进程
{
public void run()
{
int i=0;
while(true)
{
numStore.putNum(i);
try{
Thread.sleep(10);
}catch(InterruptedException e){}
System.out.println("Producer");
i++;
}
}
}
class ConsumerThread extends Thread{//消费者进程
public void run()
{
while(true)
{
try
{
Thread.sleep(1);
}catch(InterruptedException e){}
System.out.println("The consumer get data:" + numStore.getNum());
}
}
}
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-06-24
程序就自己搞定了,不会的可以看你的书,上面有具体的代码,大致上是,P先执行9次,之后V向里面取一次可以取9次,
还有就是P先执行1次V就开始取数据,两者同事进行,如果有需要可以继续更贴,或者直接加我号码
第2个回答  2013-06-24
高深的问题,我没你那境界
第3个回答  2020-06-13
系统文件坏了,要想彻底解决只能恢复系统或者重新安装系统了
第4个回答  2020-05-28
如有陌生人进入你的农场偷摘系统在消息栏后面有不让其盗窃的按钮。开启后该人将偷不了。
相似回答