采用synchronized鎖以及wait notify方法實(shí)現(xiàn)
1.首先創(chuàng)建消費(fèi)的產(chǎn)品對(duì)象
class Person{
private int foodNum = 0;
private Object synObj = new Object();
private final int MAX_NUM = 5;
public void produce() throws InterruptedException{
synchronized (synObj){
while (foodNum == 5){
System.out.println("box is full,size = " + foodNum);
synObj.wait();
}
foodNum++;
System.out.println("produce success foodNum = " + foodNum);
synObj.notifyAll();
}
}
public void consume() throws InterruptedException{
synchronized (synObj){
while (foodNum == 0){
System.out.println("box is empty,size = " + foodNum);
synObj.wait();
}
foodNum--;
System.out.println("consume success foodNum = " + foodNum);
synObj.notifyAll();
}
}
}
2.定義生產(chǎn)者消費(fèi)者方法
//生產(chǎn)者
class Producer implements Runnable{
private Person person;
private String producerName;
public Producer(String producerName, Person person){
this.producerName = producerName;
this.person = person;
}
@Override
public void run(){
while (true){
try{
person.produce();
} catch (InterruptedException e){
e.printStackTrace();
}
}
}
}
//消費(fèi)者
class Consumer implements Runnable{
private Person person;
private String consumerName;
public Consumer(String consumerName, Person person){
this.consumerName = consumerName;
this.person = person;
}
@Override
public void run(){
try{
person.consume();
} catch (InterruptedException e){
e.printStackTrace();
}
}
}
3.創(chuàng)建方法調(diào)用生產(chǎn)者和消費(fèi)者
public class WaitAndNotify{
public static void main(String[] args) throws IOException{
Person person = new Person();
new Thread(new Consumer("消費(fèi)者一", person)).start();
new Thread(new Consumer("消費(fèi)者二", person)).start();
new Thread(new Consumer("消費(fèi)者三", person)).start();
new Thread(new Producer("生產(chǎn)者一", person)).start();
new Thread(new Producer("生產(chǎn)者一", person)).start();
new Thread(new Producer("生產(chǎn)者一", person)).start();
}
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。