Java多线程 生产者消费者模型实例详解
当缓冲区元素为满,生产者无法生产,消费者继续消费;缓冲区元素为空,消费者无法消费,生产者继续生产;制作一个简单的缓冲区ValueObject,value为空表示缓冲区为空,value不为空表示缓冲区满生产者,缓冲区满则wait(),不再生产,等待消费者notify(),缓冲区为空则开始生产消费者,缓冲区为空则wait(),等待生产者notify(),缓冲区为满,消费者开始消费main方法,启动一个生产者和一个消费者运行结果如下生产者和消费者交替运行,生产者生产一个字符串,缓冲区为满,消费者消费一个字符串,缓冲区为空,循环往复,满足生产者/消费者模型。是因为此时缓冲区为满,Producer1的notify()应该唤醒Consumer却唤醒了Producer2,导致Producer2因为缓冲区为满和Consumer没有被唤醒而处于waiting状态,此时三个线程均在等待,出现了假死。
用户评论