Java实现生产者消费者问题与读者写者问题详解

在很多程序设计中,资源共享是很重要的,我们要在多个进程中访问共享的资源要怎么操作呢?接下来是云上诗词技术频道小编给大家带来的Java实现生产者消费者问题与读者写者问题详解,大家一定要实现哦。

1、生产者消费者问题

生产者消费者问题是研究多线程程序时绕不开的经典问题之一,它描述是有一块缓冲区作为仓库,生产者可以将产品放入仓库,消费者则可以从仓库中取走产品。解决生产者/消费者问题的方法可分为两类:(1)采用某种机制保护生产者和消费者之间的同步;(2)在生产者和消费者之间建立一个管道。第一种方式有较高的效率,并且易于实现,代码的可控制性较好,属于常用的模式。第二种管道缓冲区不易控制,被传输数据对象不易于封装等,实用性不强。

同步问题核心在于:如何保证同一资源被多个线程并发访问时的完整性。常用的同步方法是采用信号或加锁机制,保证资源在任意时刻至多被一个线程访问。Java语言在多线程编程上实现了完全对象化,提供了对同步机制的良好支持。在Java中一共有五种方法支持同步,其中前四个是同步方法,一个是管道方法。

wait() / notify()方法await() / signal()方法BlockingQueue阻塞队列方法Semaphore方法PipedInputStream / PipedOutputStream

1.1 wait() / notify()方法

wait() / nofity()方法是基类Object的两个方法,也就意味着所有Java类都会拥有这两个方法,这样,我们就可以为任何对象实现同步机制。

wait()方法:当缓冲区已满/空时,生产者/消费者线程停止自己的执行,放弃锁,使自己处于等等状态,让其他线程执行。

notify()方法:当生产者/消费者向缓冲区放入/取出一个产品时,向其他等待的线程发出可执行的通知,同时放弃锁,使自己处于等待状态。

各起了4个生产者,4个消费者

package test;public class Hosee {private static Integer count = 0;private final Integer FULL = 10;private static String LOCK = "LOCK";class Producer implements Runnable {@Override public void run() {for (int i = 0; i

原创文章,作者:nxyxs,如若转载,请注明出处:http://www.yunshangshici.com/31130.html

(0)
上一篇 2022年6月11日 下午1:46
下一篇 2022年6月11日 下午1:46

相关推荐

返回顶部