为了账号安全,请及时绑定邮箱和手机立即绑定

线程类----生产消费者模型

标签:
Java

程序中加锁语句块,是为了保证生产时不能消费,消费时不能生产
程序中唤醒(notifyAll)语句是保证生产/消费完,唤醒消费/生产线程
-----------------------代码如下----------------------------
//生产类
import java.util.List;

public class Produce extends Thread {
private int max;
private List<Integer>list;
public Produce(String name,int max,List<Integer>list) {
super(name);//这里如果使用接口创建线程,super就不可以调用name
this.max=max;
this.list=list;
}
public void run(){
while(true){
synchronized (list) {
while(list.size()==max){
System.out.println("仓库已满!");
try {
list.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
int num=(int) (Math.random()*100+1);
list.add(num);
System.out.println(this.getName()+"生产了产品:"+num);
list.notifyAll();
}
}
}
}
//客户类
import java.util.List;

public class Consumer extends Thread{
private int max;
private List<Integer>list;
public Consumer(String name,int max,List<Integer>list) {
super(name);
this.max=max;
this.list=list;
}
@Override
public void run() {
while(true){
synchronized (list) {
while(list.isEmpty()){
System.out.println("仓库已空!");
try {
list.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println(this.getName()+"消费了产品:"+list.get(list.size()-1));//每次消费最后一个
list.remove(list.size()-1);//移除最后一个
list.notifyAll();
}
}
}
}
//测试类
import java.util.ArrayList;
import java.util.List;

public class Test{
public static void main(String[] args) {
List<Integer>list=new ArrayList<Integer>();//共用的仓库
int max=100;//仓库最大容量
Produce p=new Produce("生产者", max, list);
Consumer c=new Consumer("消费者", max, list);
p.start();
c.start();
}

}

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消