您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
public class Producer extends Thread {
private final CakeQueue cakeQueue;
private static int cakeNo = 0;
public Producer(String name, CakeQueue cakeQueue){
super(name);
this.cakeQueue = cakeQueue;
}
public void run(){
try {
while (true) {
Thread.sleep(1000);
Cake cake = new Cake(createCakeNo());
this.cakeQueue.put(cake);
}
} catch (InterruptedException e) {
}
}
private static synchronized int createCakeNo() {
return cakeNo++;
}
}
public class Consumer extends Thread{
private final CakeQueue cakeQueue;
public Consumer(String name, CakeQueue cakeQueue) {
super(name);
this.cakeQueue = cakeQueue;
}
public void run(){
try {
while (true) {
Cake cake = cakeQueue.take();
Thread.sleep(1000);
}
} catch (InterruptedException e) {
}
}
}
/**
* 蛋糕
*/
public class Cake {
private final int no;
public Cake(int no) {
this.no = no;
}
public int getNo() {
return this.no;
}
public String toString(){
return "[ Cake No." + no + "]";
}
}
/**
* 存放蛋糕的队列
*/
public class CakeQueue {
private final Cake[] cakeList;
private int head;
private int tail;
private int counter;
public CakeQueue(int num) {
this.cakeList = new Cake[num];
this.head = 0;
this.tail = 0;
this.counter = 0;
}
//同步放入一个蛋糕
public synchronized void put(Cake cake) throws InterruptedException {
System.out.println(Thread.currentThread().getName() + "put:No" + cake.getNo());
while(counter >= cakeList.length){
wait();
}
cakeList[tail] = cake;
tail = (tail + 1) % cakeList.length;
counter++;
notifyAll();
}
//同步获取一个蛋糕
public synchronized Cake take() throws InterruptedException {
while(counter <= 0){
wait();
}
Cake cake = cakeList[head];
head = (head + 1) % cakeList.length;
counter--;
notifyAll();
System.out.println("------" + Thread.currentThread().getName() + "take:No" + cake.getNo());
return cake;
}
}
public class Main {
public static void main(String[] args) {
CakeQueue cakeQueue = new CakeQueue(3);
new Producer("Producer-1:", cakeQueue).start();
new Producer("Producer-2:", cakeQueue).start();
new Producer("Producer-3:", cakeQueue).start();
new Consumer("Consumer-1:", cakeQueue).start();
new Consumer("Consumer-2:", cakeQueue).start();
new Consumer("Consumer-3:", cakeQueue).start();
}
}
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。