java线程(三)并发协作-生产者消费者模型(转载)
运行结果:已经生产了10个产品,现仓储量为40 已经生产了10个产品,现仓储量为50 已经消费了50个产品,现仓储量为0 已经生产了80个产品,现仓储量为80 已经消费了30个产品,现仓储量为50 已经生产了10个产品,现仓储量为60 已经消费了20个产品,现仓储量为40 已经生产了10个产品,现仓储量为50 已经生产了10个产品,现仓储量为60 已经生产了10个产品,现仓储量为70?说明:??? 对于本例,要说明的是当发现不能满足生产或者消费条件的时候,调用对象的wait方法,wait方法的作用是释放当前线程的所获得的锁,并调用对象的notifyAll() 方法,通知(唤醒)该对象上其他等待线程,使得其继续执行。这样,整个生产者、消费者线程得以正确的协作执行。notifyAll() 方法,起到的是一个通知作用,不释放锁,也不获取锁。只是告诉该对象上等待的线程“可以竞争执行了,都醒来去执行吧”。本文转载自:http://lavasoft.blog.51cto.com/62575/222742博主个人加注:notifyAll和notify的不同之处:notifyAll是唤醒同步监视器上等待的所有线程只有当前线程放弃对同步监视器的锁定之后,才可以执行被唤醒的线程。而notify是唤醒同步监视器上的任意一个等待线程。但是notify容易产生死锁,所以大部分情况下,都是采用notifyAll方法,可以看到上面的程序都是采用notifyAll。