package com.test;
import java.util.LinkedList;
public class ProductorConsumerDemo {
public static void main(String[] args) {
Basket basket =new Basket();
Productor pro=new Productor(basket);
Consumer con=new Consumer(basket);
pro.start();
con.start();
}
}
class Consumer extends Thread{
private Basket basket=null;
public Consumer(Basket basket) {
super();
this.basket = basket;
}
@Override
public void run() {
basket.popApples();
}
}
class Productor extends Thread{
private Basket basket=null;
public Productor(Basket basket) {
super();
this.basket = basket;
}
@Override
public void run() {
basket.pushApples();
}
}
class Basket{
private LinkedList<Apple> basket=new LinkedList<>();
public synchronized void pushApples(){
for (int i = 0; i < 20; i++) {
Apple apple=new Apple(i);
push(apple);
}
notify();
}
public synchronized void popApples(){
for (int i = 0; i < 20; i++) {
pop();
}
}
//向篮子中放苹果
public void push(Apple apple){
if(basket.size()==5){
try {
System.out.println("生产者唤醒消费者");
notify();
System.out.println("生产者开始等待");
wait();
System.out.println("生产者等待结束");
} catch (Exception e) {
e.printStackTrace();
}
}
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
basket.addFirst(apple);
System.out.println("存放:"+apple.toString());
}
//向篮子中取苹果
public void pop(){
if(basket.size()==0){
try {
System.out.println("消费者唤醒生产者");
notify();
System.out.println("消费者开始等待");
wait();
System.out.println("消费者等待结束");
} catch (Exception e) {
e.printStackTrace();
}
}
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
Apple apple=basket.removeFirst();
System.out.println("吃掉:"+apple.toString());
}
}
class Apple{
private int id;
public Apple(int id) {
super();
this.id = id;
}
@Override
public String toString() {
return "Apple [id=" + (id + 1)+"]";
}
}
import java.util.LinkedList;
public class ProductorConsumerDemo {
public static void main(String[] args) {
Basket basket =new Basket();
Productor pro=new Productor(basket);
Consumer con=new Consumer(basket);
pro.start();
con.start();
}
}
class Consumer extends Thread{
private Basket basket=null;
public Consumer(Basket basket) {
super();
this.basket = basket;
}
@Override
public void run() {
basket.popApples();
}
}
class Productor extends Thread{
private Basket basket=null;
public Productor(Basket basket) {
super();
this.basket = basket;
}
@Override
public void run() {
basket.pushApples();
}
}
class Basket{
private LinkedList<Apple> basket=new LinkedList<>();
public synchronized void pushApples(){
for (int i = 0; i < 20; i++) {
Apple apple=new Apple(i);
push(apple);
}
notify();
}
public synchronized void popApples(){
for (int i = 0; i < 20; i++) {
pop();
}
}
//向篮子中放苹果
public void push(Apple apple){
if(basket.size()==5){
try {
System.out.println("生产者唤醒消费者");
notify();
System.out.println("生产者开始等待");
wait();
System.out.println("生产者等待结束");
} catch (Exception e) {
e.printStackTrace();
}
}
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
basket.addFirst(apple);
System.out.println("存放:"+apple.toString());
}
//向篮子中取苹果
public void pop(){
if(basket.size()==0){
try {
System.out.println("消费者唤醒生产者");
notify();
System.out.println("消费者开始等待");
wait();
System.out.println("消费者等待结束");
} catch (Exception e) {
e.printStackTrace();
}
}
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
Apple apple=basket.removeFirst();
System.out.println("吃掉:"+apple.toString());
}
}
class Apple{
private int id;
public Apple(int id) {
super();
this.id = id;
}
@Override
public String toString() {
return "Apple [id=" + (id + 1)+"]";
}
}