利用线程相关知识模拟生产者和消费者
package com.wxh.day1017;
//生产者 消费者
public class Demo1 {
public static void main(String[] args) {
Basket bas=new Basket();
Producer pro=new Producer(bas);
Consumer cus=new Consumer(bas);
new Thread(pro).start();
new Thread(cus).start();
}
}
//馒头类
class ManTou{
private int id;
public ManTou(){
}
public ManTou(int id){
this.id=id;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
//篮子类
class Basket{
private ManTou[] mts;
private int index;
public Basket(){
mts=new ManTou[10];
index=0;
}
public synchronized void put(ManTou mt){
while(index>=mts.length){
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
mts[index]=mt;
index++;
notifyAll();
}
public synchronized ManTou get(){
while(index<=0){
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
notifyAll();
index--;
return mts[index];
}
}
//生产者类
class Producer implements Runnable{
private Basket basket;
public Producer(Basket basket){
this.basket=basket;
}
public void run() {
for (int i = 0; i < 100; i++) {
ManTou mt=new ManTou(i);
basket.put(mt);
System.out.println("生产者生产了一个馒头"+mt.getId());
try {
Thread.sleep(300);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
//消费者类
class Consumer implements Runnable{
private Basket basket;
public Consumer(Basket basket){
this.basket=basket;
}
public void run() {
for (int i = 0; i < 100; i++) {
ManTou mt=basket.get();
System.out.println("消费者消费了馒头"+mt.getId());
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
//线程的生命周期 死锁 生产者和消费者