首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

JAVA线程同步的生产者和消费者有关问题

2012-01-29 
JAVA线程同步的生产者和消费者问题classproductorextendsThread{Integerproductproductor(Integerproduct

JAVA线程同步的生产者和消费者问题
class   productor   extends   Thread{
        Integer   product;
        productor(Integer   product){
                this.product   =   product;
        }

        public     void   run(){
                synchronized(product){
                        for(int   i   =   0;i   <   5;i++){
                                product++;
                                System.out.println( "The   product   is: "   +   product);
                                product.notify();
                                try{
                                        product.wait();
                                }catch(Exception   e){
                                        e.printStackTrace();
                                }
                        }
                        product.notify();
                }
        }
}
class   Consumer   extends   Thread{
        Integer   consumer;
        Consumer(Integer   consumer){
                this.consumer   =   consumer;
        }
        public     void   run(){
                synchronized(consumer){
                        for(int   i   =   0;i   <   5;i++){
                                System.out.println( "The   consumer   is: "   +   consumer);
                                consumer.notify();
                                try{
                                        consumer.wait();
                                }catch(Exception   e){
                                        e.printStackTrace();


                                }
                        }
                        consumer.notify();
                }
        }
}
public   class   test{
        public   static   void   main(String   args[])
        {
                Integer   i   =   new   Integer(5);
                new   productor(i).start();
                new   Consumer(i).start();
        }
}
在执行时,总是会报java.lang.IllegalMonitorStateException:   current   thread   not   owner请各位高手指点一下

[解决办法]
生产者和消费者模型不时这样的.
[解决办法]
两个 synchronized() 对象不是同一个
[解决办法]
你从网上找一下.张孝祥讲过这个问题.你应该再写一个类(实现生产和消费)
[解决办法]
public class ThreadTest {
public static void main(String args[]) {
Tickets i = new Tickets(10);
new Productor(i).start();
new Consumer(i).start();
}
}

class Tickets {
int number = 0;//票号.

int size;//总数.

boolean available = false;

public Tickets(int size) {
this.size = size;
}
}

class Productor extends Thread {
Tickets productor=null;

Productor(Tickets productor) {
this.productor = productor;
}

public void run() {

while(productor.number <productor.size){
synchronized(productor)
{
System.out.println( "The product is: " + (++productor.number));
productor.available = true;
}

}

}
}

class Consumer extends Thread {
Tickets consumer = null;

int i=0;

Consumer(Tickets consumer) {
this.consumer = consumer;
}

public void run() {

while(i <consumer.size){
synchronized(consumer)
{
if (consumer.available==true&&i <=consumer.number)
System.out.println( "The consumer is: " + (++i));
if (i == consumer.size)
try{sleep(1);}catch(Exception e){}
consumer.available = false;
}
}
}
}

热点排行