博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
生产者与消费者
阅读量:4308 次
发布时间:2019-06-06

本文共 1626 字,大约阅读时间需要 5 分钟。

package ProConDemo;

//创建资源

public class Goods {

private String name;

//计数器

private int count = 1;

//创建一个标记

private boolean flag;

//创建资源的生产行为

public synchronized void Sale(String name) {

//判断标记

while(flag)

//有资源就等待

try {wait();} catch (InterruptedException e) {e.printStackTrace();}

//没有资源就生产

this.name = name +"----"+count;
count++;
System.out.println(Thread.currentThread().getName()+"生产了"+this.name);

//生产完毕改标记

flag = true;

//唤醒所有等待线程

notifyAll();
}
//创建资源的消费行为
public synchronized void Buy() {

//判断标记

while(!flag)

//没有资源就等待

try {wait();} catch (InterruptedException e) {e.printStackTrace();}

//有资源就消费

System.out.println(Thread.currentThread().getName()+"消费了"+this.name);

//消费完毕改标记

flag = false;

//唤醒所有等待线程

notifyAll();
}
}

 

package ProConDemo;

//创建消费者任务类

public class Cou implements Runnable{

private Goods good;
//将资源对象作为参数传入消费者的构造函数中
public Cou(Goods good) {
this.good = good;
}
//覆盖run()
public void run() {
while(true)
good.Buy();
}
}

package ProConDemo;

//创建生产者任务类

public class Pro implements Runnable{

private Goods good;
//将资源对象作为参数传入生产者构造函数中
public Pro(Goods good) {
this.good = good;
}

//覆盖run()

public void run() {
while(true)
good.Sale("面包");
}
}

//执行

package ProConDemo;

public class Demo {

public static void main(String[] args) {

// TODO Auto-generated method stub

//创建资源对象

Goods good = new Goods();
//创建生产与消费任务对象
Pro pro = new Pro(good);
Cou cou = new Cou(good);
//创建线程,并将任务对象传入
Thread t0 = new Thread(pro);
Thread t1 = new Thread(pro);
Thread t2 = new Thread(cou);
Thread t3 = new Thread(cou);

//启动线程

t0.start();
t1.start();
t2.start();
t3.start();
}

}

转载于:https://www.cnblogs.com/olddriver123/p/8250863.html

你可能感兴趣的文章
<h:panelgroup>相当于span元素
查看>>
java中append()的方法
查看>>
必学高级SQL语句
查看>>
经典SQL语句大全
查看>>
log日志记录是什么
查看>>
<rich:modelPanel>标签的使用
查看>>
<h:commandLink>和<h:inputLink>的区别
查看>>
<a4j:keeyAlive>的英文介绍
查看>>
关于list对象的转化问题
查看>>
VOPO对象介绍
查看>>
suse创建的虚拟机,修改ip地址
查看>>
linux的挂载的问题,重启后就挂载就没有了
查看>>
docker原始镜像启动容器并创建Apache服务器实现反向代理
查看>>
docker容器秒死的解决办法
查看>>
管理网&业务网的一些笔记
查看>>
openstack报错解决一
查看>>
openstack报错解决二
查看>>
linux source命令
查看>>
openstack报错解决三
查看>>
乙未年年终总结
查看>>