package com.javase.threading;
import java.util.ArrayList;
import java.util.List;
/*使用wait方法和notify方法实现生产者和消费者模型*/
public class ProCusModel {
public static void main(String[] args) {
// 创建一个仓库对象
List list = new ArrayList();
// 创建2个线程对象
Thread t1 = new Thread(new Produce(list));
Thread t2 = new Thread(new Consume(list));
t1.setName("生产者线程");
t2.setName("消费者线程");
t1.start();
t2.start();
}
}
// 生产线程
class Produce implements Runnable {
// 仓库
private List list;
public Produce(List list) {
this.list = list;
}
@Override
public void run() {
// 一直生产
while (true) {
synchronized (list) {
if (list.size() > 0) {
// 当前线程进入等待状态, 并且释放list集合的锁
try {
list.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
Object obj = new Object();
list.add(obj);
System.out.println(Thread.currentThread().getName() + "---->" + obj);
// 唤醒消费者消费
list.notify();
}
}
}
}
// 消费线程
class Consume implements Runnable {
// 仓库
private List list;
public Consume(List list) {
this.list = list;
}
@Override
public void run() {
// 一直消费
while (true) {
synchronized (list) {
if (list.size() == 0) {
// 仓库已经空了,消费者等待,释放掉list集合的锁
try {
list.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
// 仓库中有数据
Object obj = list.remove(0);
System.out.println(Thread.currentThread().getName() + "--->" + obj);
// 唤醒生产哲生成
list.notify();
}
}
}
}
声明:1. 本站所有资源来源于用户上传和网络,因此不包含技术服务请大家谅解!如有侵权请邮件联系客服!
2. 本站不保证所提供下载的资源的准确性、安全性和完整性,资源仅供下载学习之用!如有链接无法下载、失效或广告,请联系客服处理!
3. 您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容资源!如用于商业或者非法用途,与本站无关,一切后果请用户自负!
2. 本站不保证所提供下载的资源的准确性、安全性和完整性,资源仅供下载学习之用!如有链接无法下载、失效或广告,请联系客服处理!
3. 您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容资源!如用于商业或者非法用途,与本站无关,一切后果请用户自负!