放鸡蛋 放鸡蛋
实体类
package com.pojo;
import java.io.Serializable;
public class Egg implements Serializable { //实体类 数字的载体
private double weight;
private double price;
public double getWeight() {
return weight;
}
public void setWeight(double weight) {
this.weight = weight;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
}
活动----
package com.active;
import java.util.ArrayList;
import java.util.List;
import com.pojo.Egg;
/**
* 线程之间的通信 放鸡蛋和取鸡蛋 生产者和消费者
*
* @author mahui
*/
public class Basket {
/** 共享资源 篮子*/
private List<Egg> eggs=new ArrayList<Egg>();
//放鸡蛋
public synchronized void putEgg(Egg egg){
while (eggs.size()>0) { //没鸡蛋就增加 有鸡蛋则等待
try{
wait();//有鸡蛋 则等待取走
}catch(InterruptedException e){
e.printStackTrace();
}
}
eggs.add(egg);
//唤醒阻塞队列某线程到就绪队列
notify();
System.out.println("放入鸡蛋");
}
//取鸡蛋
public synchronized Egg getEgg(){
while(eggs.size()==0){
try {
wait();
} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
Egg egg =eggs.get(0);
//清空篮子
eggs.clear();
//唤醒阻塞队列某线程到就绪队列
notify();
System.out.println("拿到鸡蛋");
return egg;
}
}
测试--
package com.test;
import com.active.Basket;
import com.pojo.Egg;
public class Main {
static class PutThread extends Thread{
private Basket basket;
private Egg egg=new Egg();
public PutThread (Basket basket){
this.basket=basket;
}
public void run(){
for(int i=0;i<10;i++){
basket.putEgg(egg);
}
}
}
static class GetThread extends Thread{
private Basket basket;
public GetThread (Basket basket){
this.basket=basket;
}
public void run(){
for(int i=0;i<10;i++){
basket.getEgg();
}
}
}
public static void main(String[] args) {
Basket basket=new Basket();
PutThread put =new PutThread(basket);
GetThread get =new GetThread(basket);
put.start();
get.start();
}
}
放入鸡蛋
拿到鸡蛋
放入鸡蛋
拿到鸡蛋
放入鸡蛋
拿到鸡蛋
放入鸡蛋
拿到鸡蛋
放入鸡蛋
拿到鸡蛋
放入鸡蛋
拿到鸡蛋
放入鸡蛋
拿到鸡蛋
放入鸡蛋
拿到鸡蛋
放入鸡蛋
拿到鸡蛋
放入鸡蛋
拿到鸡蛋
可以在拿鸡蛋 或者放鸡蛋中加入代码
Thread.sleep(1000);
则 会一秒钟弹出一次放鸡蛋
放入鸡蛋
拿到鸡蛋
放入鸡蛋
↓----
放入鸡蛋
拿到鸡蛋
放入鸡蛋
拿到鸡蛋
放入鸡蛋
省略------n行代码 自己试试吧