WEB开发网
开发学院软件开发Java Java线程:并发协作-生产者消费者模型 阅读

Java线程:并发协作-生产者消费者模型

 2009-12-02 00:00:00 来源:WEB开发网   
核心提示: 已经生产了10个产品,现仓储量为40已经生产了10个产品,Java线程:并发协作-生产者消费者模型(2),现仓储量为50已经消费了50个产品,现仓储量为0已经生产了80个产品,当然这样的例子更复杂,更难以说明这样一个简单模型,现仓储量为80已经消费了30个产品,现仓储量为50已经生产了10个产品

已经生产了10个产品,现仓储量为40
已经生产了10个产品,现仓储量为50
已经消费了50个产品,现仓储量为0
已经生产了80个产品,现仓储量为80
已经消费了30个产品,现仓储量为50
已经生产了10个产品,现仓储量为60
已经消费了20个产品,现仓储量为40
已经生产了10个产品,现仓储量为50
已经生产了10个产品,现仓储量为60
已经生产了10个产品,现仓储量为70
Process finished with exit code 0

说明:

对于本例,要说明的是当发现不能满足生产或者消费条件的时候,调用对象的wait方法,wait方法的作用是释放当前线程的所获得的锁,并调用对象的notifyAll() 方法,通知(唤醒)该对象上其他等待线程,使得其继续执行。这样,整个生产者、消费者线程得以正确的协作执行。

notifyAll() 方法,起到的是一个通知作用,不释放锁,也不获取锁。只是告诉该对象上等待的线程“可以竞争执行了,都醒来去执行吧”。

本例仅仅是生产者消费者模型中最简单的一种表示,本例中,如果消费者消费的仓储量达不到满足,而又没有生产者,则程序会一直处于等待状态,这当然是不对的。实际上可以将此例进行修改,修改为,根据消费驱动生产,同时生产兼顾仓库,如果仓不满就生产,并对每次最大消费量做个限制,这样就不存在此问题了,当然这样的例子更复杂,更难以说明这样一个简单模型。

我喜欢简单的例子。

此出处:http://lavasoft.blog.51cto.com/62575/221932

上一页  1 2 

Tags:Java 线程 并发

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接