package com.wenshao.juc;
/**
* 生產者和消費者案例
*
* @author Administrator
*
*/
public class TestProductorAndConsumer {
public static void main(String[] args) {
Clerk clerk = new Clerk();
Productor productor = new Productor(clerk);
Consumer consumer = new Consumer(clerk);
new Thread(productor, "生產者 A").start();
new Thread(consumer, "消費者 B").start();
new Thread(productor, "生產者 C").start();
new Thread(consumer, "消費者 D").start();
}
}
class Clerk {
private int product = 0;
// 1. 進貨
public synchronized void get() {
while(product >= 1) { // 為了避免虛假喚醒問題,wait() 應該總是使用在迴圈中
System.out.println("產品已滿");
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(Thread.currentThread().getName() + ":" + ++product);
this.notifyAll();
}
// 2. 賣貨
public synchronized void sale() {
while (product <= 0) {
System.out.println("缺貨!");
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(Thread.currentThread().getName() + ":" + --product);
this.notifyAll();
}
}
// 生產者
class Productor implements Runnable {
private Clerk clerk;
public Productor(Clerk clerk) {
super();
this.clerk = clerk;
}
@Override
public void run() {
for (int i = 0; i <= 20; i++) {
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
clerk.get();
}
}
}
// 消費者
class Consumer implements Runnable {
private Clerk clerk;
public Consumer(Clerk clerk) {
super();
this.clerk = clerk;
}
@Override
public void run() {
for (int i = 0; i <= 20; i++) {
clerk.sale();
}
}
}
java多執行緒之消費生產模型-使用synchronized解決虛假喚醒
相關文章
- 多執行緒——虛假喚醒執行緒
- java多執行緒之消費生產模型Java執行緒模型
- 執行緒虛假喚醒問題剖析執行緒
- java多執行緒:執行緒間通訊——生產者消費者模型Java執行緒模型
- python多執行緒+生產者和消費者模型+queue使用Python執行緒模型
- Java多執行緒——生產者消費者示例Java執行緒
- Java多執行緒之synchronized詳解Java執行緒synchronized
- java多執行緒之(synchronized)Java執行緒synchronized
- 虛假喚醒
- Java 多執行緒基礎(六)執行緒等待與喚醒Java執行緒
- 6、JUC:傳統的生產者消費者問題,防止虛假喚醒問題
- Java 多執行緒(Java.Thread)------ 執行緒協作(生產者消費者模式)Java執行緒thread模式
- python 多執行緒實現生產者與消費者模型Python執行緒模型
- Java 多執行緒學習(執行緒通訊——消費者和生產者)Java執行緒
- Java 多執行緒基礎(十二)生產者與消費者Java執行緒
- Java多執行緒——消費者與生產者的關係Java執行緒
- Java多執行緒之執行緒同步【synchronized、Lock、volatitle】Java執行緒synchronized
- Java多執行緒之synchronized理論Java執行緒synchronized
- Java多執行緒——synchronized的使用示例Java執行緒synchronized
- java 執行緒池、多執行緒併發實戰(生產者消費者模型 1 vs 10) 附案例原始碼Java執行緒模型原始碼
- 生產者消費者模式--java多執行緒同步方法的應用模式Java執行緒
- Java多執行緒消費訊息Java執行緒
- Java多執行緒(三):SynchronizedJava執行緒synchronized
- java多執行緒3:synchronizedJava執行緒synchronized
- python中多執行緒消費者生產者問題Python執行緒
- Python-多執行緒及生產者與消費者Python執行緒
- 2020119-多執行緒暫停和喚醒執行緒
- 使用Python佇列和多執行緒實現生產者消費者Python佇列執行緒
- Java多執行緒程式設計(同步、死鎖、生產消費者問題)Java執行緒程式設計
- Java多執行緒之二(Synchronized)Java執行緒synchronized
- java多執行緒:執行緒同步synchronized(不同步的問題、佇列與鎖),死鎖的產生和解決Java執行緒synchronized佇列
- 使用多執行緒增加kafka消費能力執行緒Kafka
- C#多執行緒學習(三) 生產者和消費者C#執行緒
- 多執行緒併發如何高效實現生產者/消費者?執行緒
- java多執行緒之執行緒的基本使用Java執行緒
- Python並行程式設計(六):多執行緒同步之queue(佇列)實現生產者-消費者模型Python並行行程程式設計執行緒佇列模型
- 多執行緒必考的「生產者 - 消費者」模型,看齊姐這篇文章就夠了執行緒模型
- Java多執行緒之記憶體模型Java執行緒記憶體模型