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());
}
}
}
}
温馨提示:内容为网友见解,仅供参考