有关多线程,消费者和生产者的问题
这个问题是用JAVA实现消费者和生产者。代码如下:
class Procno
{
int empty = 10 ;
int full = 0 ;
int [] common = new int[10];
boolean control = true;
}
//生产者
class Producer implements Runnable
{
Procno com ;
Producer(Procno p)
{
com = p;
}
public void run ()
{
synchronized (com){
try{
if(com.full<10&&com.control)
{
for(int i=0;i<10;i++)
{
int n = (int)(Math.random()*100);
com.common[i] = n;
System.out.println("produce a data:" + n);
com.empty--;
com.full++;
notify();
Thread.sleep(1000);
}
}else{
com.control = false;
wait();
}
}catch(InterruptedException e){
System.out.println("producer appear excption!");
}catch(IllegalMonitorStateException e1){System.out.println("erro1");}
}
}
}
//消费者
class Consumer implements Runnable
{
Procno com;
Consumer(Procno c)
{
com = c;
}
public void run()
{
synchronized (com){
try{
if(com.empty>0&&!com.control)
{
for(int i=0;i<10;i++)
{
int n = com.common[i];
System.out.println("consum a data:" + n);
Thread.sleep(1000);
com.empty++;
com.full--;
notify();
}
}else{
com.control = true;
wait();
}
}catch(InterruptedException e){
System.out.println("consumer appear exception");
}catch(IllegalMonitorStateException e1){System.out.println("erro2");}
}
}
}
class TestProcno
{
public static void main(String args[])
{
Procno comm = new Procno();
Thread t1 = new Thread(new Producer(comm));
Thread t2 = new Thread(new Consumer(comm));
t1.start();
t2.start();
}
}
问题是老跳出IllegalMonitorStateException和InterruptedException这两个异常,不知道是为什么,请高手指导一下啊!谢谢了。
问题点数:0、回复次数:3Top
1 楼vgvg(上帝在关闭一扇窗的同时,在别处打开了一扇门。可这扇门迟迟不开,我只好破门而入!)回复于 2004-12-01 20:53:57 得分 0
Thread.sleep(1000);
wait();
是要捕捉异常的.Top
2 楼sexywarden03(tom)回复于 2004-12-01 21:03:22 得分 0
try{Thread.sleep(1000)}catch{InterrupedException e){};
Top
3 楼crasy1984(hunter)回复于 2004-12-01 21:59:14 得分 0
这两个异常我已经在程序中写了也已经捕捉了,但是就是不知道怎么样改正才能消除IllegalMonitorStateException 这个异常,帮我修改一下吧,谢谢了!Top




