编程语言
首页 > 编程语言> > 如何在java中开发类似于生产者消费者的应用程序?

如何在java中开发类似于生产者消费者的应用程序?

作者:互联网

我必须开发一个类似于java中的生产者 – 消费者问题的应用程序.

但是我不太了解java,我有几个问题.

生产者和消费者都是不同的线程,他们都需要访问相同的缓冲区.如果它们都是不同的类(扩展线程类或实现可运行的接口),我如何编码它们以使用完全相同的缓冲区(这个假设的缓冲区是某个对象的数组)?

我还想了解一些有关整体架构以及如何实现它们的建议.我需要对它们进行编码,以便两个线程不会同时使用相同的缓冲区位置,两个生成器线程不会同时插入完全相同的值,生产者无法在一个新项目中插入新项目已经填充缓冲区,缓冲区为空时没有消费者应该消耗.

在这个例子中,必须有几个消费者和几个生产者同时工作.

我在java中查找了一些示例,但它们与我需要的完全不同.

解决方法:

您可以通过传递它们的构造函数将同一个数组或列表实例传递给使用者和生产者.

Array a = new Array();
Consumer c = new Consumer(a);
Producer p = new Producer(a);

对于第二个问题,您希望了解(google it!)以便在Java中进行同步.您可以再次传入相同的私有对象lock1 = new Object();消费者和生产者都可以使用它作为共享锁.

http://download.oracle.com/javase/tutorial/essential/concurrency/locksync.html

每当消费者或生产者访问共享阵列时,他们都需要首先获得锁定.其他条件要求,例如“当数组已满时不插入元素”或“数组为空时不消耗元素”可以在同步块内实现.

public void add(Object someObject){
    synchronized (lock1) {
        if(a.size()>limit) {
            System.out.println("Array is full");
        } else {
           a.add(someObject)
        }
    }
}

标签:producer-consumer,java,multithreading,concurrency
来源: https://codeday.me/bug/20190729/1576627.html