亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

線程類----生產消費者模型

標簽:
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 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
Web前端工程師
手記
粉絲
4
獲贊與收藏
25

關注作者,訂閱最新文章

閱讀免費教程

  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消