加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 08:43:53 所属栏目:Java 来源:网络整理
导读:我必须开发一个类似于 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)
        }
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读