多线程之间的通信
package Demo;
public class Consumer {
public static void main(String[] args) {
//生产者与消费者
Container container =new Container();
new productor(container).start();
new Consumer1(container).start();
}
}
//定义生产者与消费者
class productor extends Thread{
Container container;
public productor(Container container){
this.container=container;
}
@Override
public void run(){
for (int i = 0; i <100 ; i++) {
container.push(new Chicken(i));
System.out.println("生产了"+i+"只鸡");
}
}
}
class Consumer1 extends Thread{
Container container;
public Consumer1(Container container){
this.container=container;
}
@Override
public void run(){
for (int i = 0; i <100 ; i++) {
System.out.println("消费了第"+container.pull().id+"只鸡");
}
}
}
class Chicken{
int id;
public Chicken(int id) {
this.id = id;
}
}
//缓冲区
class Container {
Chicken[] chickens=new Chicken[10];
int count=0;//设置计数器
public synchronized void push(Chicken chicken){
if(count==chickens.length-1){
//通知消费者可以消费 生产者等待
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
chickens[count]=chicken; //如果没有满就进行赋值
count++; //计数器向后面加1
this.notifyAll();
}
public synchronized Chicken pull(){
if(count==0){
//等待生产者生产 消费者等待
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
//消费一只鸡
count--;
Chicken chicken=chickens[count];
//吃完了,通知生产者生产
this.notifyAll();
return chicken;
}
}