多线程协同任务之:生产者和消费者模型
介绍
在上一篇中介绍了多线程的等待和唤醒机制,这一篇我们就实践一下,多个生产者和多个消费模型。
假如有一个资源类Resouce,其有一个属性name属性和我们赋予的一个标识为flag属性。现在通过启动多线程,来达到一边赋值一边取值打印的效果。
Resource类定义
public class Resource {
/** 标识位 */
private boolean flag = false;
/** 资源名称 */
private String name;
//setter和getter方法
...
}
ProductThread线程类
public class ProductThread implements Runnable {
/** 资源对象 */
private Resource resource;
public ProductThread(Resource resource) {
this.resource = resource;
}
@Override
public void run() {
int count = 0;
while (true) {
synchronized (resource) {
if (resource.isFlag()) {// 如果有产品这个线程就放弃执行权
try {
resource.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
} else {// 如果没有产品就生产,生产完之后通知消费者
count++;
resource.setName("产品" + count);
System.out.println(Thread.currentThread().getName() +"生产者 product:" + resource.getName());
resource.setFlag(true);
resource.notifyAll();