使用多线程的消费者-生产者问题

我对线程很陌生,只是想掌握基础知识。我正在尝试解决消费者-生产者问题。


任何人都可以帮助我的代码。


import java.util.ArrayList;

import java.util.List;



public class T

{

    public static void main(String[] args) {


        ConsumeProduce consumeproduce = new ConsumeProduce();


        C c=new C();

        P p=new P();


        c.start();

        p.start();


        consumeproduce.printList();


    }


}



class C extends Thread

{


    public void run()

    {

        ConsumeProduce consumeproduce =new ConsumeProduce();


        try 

        {

            consumeproduce.consume();


        } catch (InterruptedException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

    }

}



class P extends Thread

{

    public void run()

    {


        ConsumeProduce consumeproduce =new ConsumeProduce();


        try {

            consumeproduce.produce();



        } catch (InterruptedException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

    }

}



class ConsumeProduce

{


    static int i=5;

    public List list =new ArrayList<>(10);



    synchronized void consume() throws InterruptedException

    {

        while(i>0)

        {

        wait();

        list.remove(i);

        System.out.println("removed"+i);

        i--;

        notifyAll();

        }

    }


    synchronized void produce() throws InterruptedException

    {

        while(i<=10)

        {

        wait();

        i++;

        list.add(i, 1);

        System.out.println("added"+i);

        notifyAll();

        }

    }


    void printList()

    {

        for (Object i:list)

        {

            System.out.println(i);

        }

    }


}

我无法弄清楚我的代码有什么问题。任何形式的帮助都会很有用


幕布斯6054654
浏览 145回答 1
1回答

蝴蝶刀刀

类 C 和类 P 中的 ConsumeProduce 类型的对象是同一类的不同实例,它们彼此一无所知。尝试通过 P 和 C 构造函数传递 ConsumeProduce 的单个实例。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java