java 生产者消费者模型(多对多)
来源:互联网 发布:网络动漫黑名单 编辑:程序博客网 时间:2024/06/07 04:23
package com.sunle.thread;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* 生产者,消费者模式,多对多。
*
* @author 孙乐
*
*/
public class ProducerAndConsumer {
public static void main(String[] args){
SuperMarket sm=new SuperMarket();
Producer p1=new Producer(sm);
Producer p2=new Producer(sm);
Consumer c1=new Consumer(sm);
Consumer c2=new Consumer(sm);
Consumer c3=new Consumer(sm);
Thread th1=new Thread(p1);
Thread th2=new Thread(p2);
Thread th3=new Thread(c1);
Thread th4=new Thread(c2);
Thread th5=new Thread(c3);
//多个生产者
th2.start();
th1.start();
//多个消费者
th3.start();
th4.start();
th5.start();
}
}
//超级市场类
class SuperMarket{
List list=new ArrayList<>(); //商品
int i=0; //生产次数统计
int j=0; //消费次数统计
boolean flag=true;
public synchronized void Add(){
while(list.size()>3){ //当产品比较多时就暂停生产
try {
this.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
i++;
list.add("aaaaaaa"+i);
System.out.println("添加--"+i);
this.notifyAll();
}
//消费者类
public synchronized void del(){
System.out.println("删除标记方法");
while (list.isEmpty()) {
if (j==10) {
flag = false;//若消费完了,告诉外面的线程可以退出了
return; //因为是while()方法,防止死循环,退出方法。
}
try {
System.out.println("删除方法wait()执行标记");
this.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
for(int i=list.size();i>0;i--){
System.out.println(list.get(i-1)+"删除");
list.remove(i-1);
j++; //统计消费次数
}
this.notifyAll();
}
}
//生产者类
class Producer implements Runnable {
SuperMarket sm;
public Producer(SuperMarket sm) {
this.sm=sm;
}
//生产者
public void run(){
for(int i=0;i<5;i++){
sm.Add();
}
}
}
//消费者类
class Consumer implements Runnable{
SuperMarket sm;
public Consumer(SuperMarket sm) {
this.sm=sm;
}
//消费者
public void run(){
while (sm.list!=null) {
//没有产品了就可以退出了
if(!sm.flag){
System.out.println("退出线程!!!!!!!");
return;
}
System.out.println(sm.j);
sm.del();
}
}
}
- java 生产者消费者模型(多对多)
- Java多线程六:生产者和消费者模型(多对多)
- 生产者-消费者模型(Java)
- java-多线程 多对多 生产者消费者
- java多生产者消费者
- java生产者消费者模型
- 生产者消费者模型[多生产者-多消费者模式]
- JAVA 线程通信以及多个生产者消费者模型
- Java线程(九)-生产者消费者模型
- 生产者消费者模型java实现(一)
- 【java多线程】【生产者与消费者】【二】【多对多】
- Java多线程五:生产者和消费者模型(单个对单个)
- Java线程----生产者消费者模型
- java实现生产者消费者模型
- java多线程生产者、消费者模型
- Java实现生产者-消费者模型
- Java多线程 -- 生产者消费者模型
- Java生产者与消费者模型
- 单例模式学习
- hbase连接Kerberos报错:msg=Failed to read server kerberos principal row
- sim卡
- Error: That port is already in use——Python Django
- acm
- java 生产者消费者模型(多对多)
- 线程的监控
- 课本题目
- CentOS系统下Gerrit服务器搭建
- 忘记root密码的更改方式及常见错误,附图:user表的正确格式
- 在 Java 中高效使用锁的技巧
- 圆
- 定义无参构造和有参构造方法
- (三)Git的常用操作