import java.util.ArrayList;
import java.util.HashMap;
import java.util.Random;
@SuppressWarnings("all")
/**
* 描述:
*
* @Author (fei)
* @Date $(DATE)
*/
class Producer1 implements Runnable{
private HashMap<Integer,Bank6> hashMap;
public Producer1(HashMap<Integer,Bank6> hashMap) {
this.hashMap = hashMap;
}
@Override
public void run() {
while(true) {
producer1();
}
}
public void producer1() {
for(int i =1;i<=6;i++) {
if(i == 6) {
i = 1;
}
Bank6 bank6 = hashMap.get(i);
synchronized (bank6) {
try {
if(bank6.getIndex() == 1) {
System.out.println("producer wait...");
bank6.wait();
i++;
continue;
}
/*while (bank6.getIndex() == 1) {
System.out.println("producer"+ i +" wait...");
bank6.wait();
}*/
Random random = new Random();
int n = random.nextInt(10);
bank6.setData(n);
//打印数据
System.out.println("produce data is :" + bank6.getData());
//index + 1
bank6.setIndex(bank6.getIndex() + 1);
//通知消费者
bank6.notify();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
class Consumer1 implements Runnable{
private HashMap<Integer,Bank6> hashMap;
public Consumer1(HashMap<Integer,Bank6> hashMap) {
this.hashMap = hashMap;
}
@Override
public void run() {
while(true) {
consumer1();
}
}
public void consumer1() {
for(int i =1;i<=6;i++) {
if(i == 6) {
i = 1;
}
Bank6 bank6 = hashMap.get(i);
synchronized (bank6) {
try {
if(bank6.isEmpty()) {
System.out.println("consumer wait...");
bank6.wait();
i++;
continue;
}
//print data
System.out.println("consumer consum: " + bank6.getData());
//index - 1
bank6.setIndex(bank6.getIndex()-1);
//inform producer
bank6.notify();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
class Bank6 {
private int data;
private String name;
private int index;
public Bank6(String name) {
this.name = name;
}
public boolean isEmpty() {
return this.index == 0;
}
public int getData() {
return data;
}
public void setData(int data) {
this.data = data;
}
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class ProCon6Bank {
public static void main(String[] args) {
HashMap<Integer,Bank6> hashMap = new HashMap<>();
for(int i=1;i<=6;i++) {
Bank6 bank6 = new Bank6("bank"+i);
hashMap.put(i,bank6);
System.out.println(hashMap.get(i).getName());
}
Thread producer1 = new Thread(new Producer1(hashMap));
Thread consumer1 = new Thread(new Consumer1(hashMap));
producer1.start();
consumer1.start();
}
}
生产者消费者模型
最新推荐文章于 2023-12-03 21:06:28 发布