Потребитель-производитель Проблема с использованием многопоточности - PullRequest
0 голосов
/ 22 октября 2018

Я довольно новичок в потоках и просто пытаюсь понять основы. Я пытаюсь реализовать проблему потребителя-производителя.

Может кто-нибудь помочь мне с кодом.

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);
        }
    }

}

Я не могу понять, что не так с моим кодом. Любая помощь будет полезна.

1 Ответ

0 голосов
/ 22 октября 2018

Объект типа ConsumeProduce в классе C и в классе P - это разные экземпляры одного и того же класса, которые ничего не знают друг о друге.Попробуйте передать один экземпляр ConsumeProduce через конструкторы P и C.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...