生產者消費者模式--java多執行緒同步方法的應用
生產者消費者模式是對java多執行緒的一個基礎應用
我們一共設計了貨物 生產者 消費者三個類
貨物有商標和名稱兩個屬性和對應的設定訪問方法
生產者用於設定貨物的屬性
消費者用於訪問並列印貨物的屬性
我們設定了一個生產者執行緒和兩個消費者執行緒,其中生產者一次只能生產一批貨物,由兩個消費者爭奪資源,程式碼如下
class Goods {
private String brand;
private String name;
boolean flag;//為真即有商品,為假則沒有
//空構造器
public Goods() {
}
//非空構造器
public Goods(String brand, String name) {
super();
this.brand = brand;
this.name = name;
}
//屬性設定和獲得方法
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//synchronized修飾的生產方法
public synchronized void set(String brand,String name) {
if(flag) {
try {
wait();
} catch (InterruptedException e) {
// TODO 自動生成的 catch 塊
e.printStackTrace();
}
}
this.brand=brand;
try {
Thread.sleep(400);
} catch (InterruptedException e) {
// TODO 自動生成的 catch 塊
e.printStackTrace();
}
this.name=name;
System.out.println(Thread.currentThread().getName()+"生產者執行緒生產了-----" + getBrand() + getName());
flag = true;
notifyAll();
}
//synchronized修飾的消費方法
public synchronized void get() {
while(!flag) {
try {
wait();
} catch (InterruptedException e) {
// TODO 自動生成的 catch 塊
e.printStackTrace();
}
}
System.out.println(Thread.currentThread().getName()+"消費了----" + getBrand() + getName());
flag=false;
notify();
}
}
//生產者類,用於生產,即給貨物Goods設定屬性
public class Producter implements Runnable {
private Goods g;
public Producter(Goods g) {
super();
this.g = g;
}
@Override
public void run() {
for (int i = 0; i < 30; i++) {
if (i % 2 == 0) {
g.set("哇哈哈"," 礦泉水");
} else {
g.set("旺仔", "小饅頭");
}
}
}
}
//消費者類,消費貨物,即訪問貨物的屬性
class Customer implements Runnable {
private Goods g;
public Customer(Goods g) {
super();
this.g = g;
}
@Override
public void run() {
for (int i = 0; i < 30; i++) {
g.get();
Thread.yield();
}
}
}
public class 消費者生產者模式 {
public static void main(String[] args) {
//商品物件
Goods g=new Goods();
//生產者和消費者物件
Producter p = new Producter(g);
Customer c1 = new Customer(g);
//執行緒設定
Thread a = new Thread(c1,"消費者A");
Thread b = new Thread(c1,"消費者B");
Thread c = new Thread(p);
a.start();
b.start();
c.start();
}
}
相關文章
- Java多執行緒——生產者消費者示例Java執行緒
- Java 多執行緒(Java.Thread)------ 執行緒協作(生產者消費者模式)Java執行緒thread模式
- Java多執行緒——消費者與生產者的關係Java執行緒
- java多執行緒:執行緒間通訊——生產者消費者模型Java執行緒模型
- Java 多執行緒學習(執行緒通訊——消費者和生產者)Java執行緒
- Java 多執行緒基礎(十二)生產者與消費者Java執行緒
- Java多執行緒程式設計(同步、死鎖、生產消費者問題)Java執行緒程式設計
- python執行緒通訊與生產者消費者模式Python執行緒模式
- python中多執行緒消費者生產者問題Python執行緒
- Python-多執行緒及生產者與消費者Python執行緒
- 執行緒間的協作(2)——生產者與消費者模式執行緒模式
- python多執行緒+生產者和消費者模型+queue使用Python執行緒模型
- python 多執行緒實現生產者與消費者模型Python執行緒模型
- C#多執行緒學習(三) 生產者和消費者C#執行緒
- 多執行緒併發如何高效實現生產者/消費者?執行緒
- java多執行緒之消費生產模型Java執行緒模型
- 使用Python佇列和多執行緒實現生產者消費者Python佇列執行緒
- java學習回顧---生產者與消費者問題以及多執行緒補充Java執行緒
- 生產者消費者模式模式
- java 執行緒池、多執行緒併發實戰(生產者消費者模型 1 vs 10) 附案例原始碼Java執行緒模型原始碼
- java編寫生產者/消費者模式的程式。Java模式
- 執行緒同步介紹及 生產者消費者問題舉例 C#版執行緒C#
- 生產消費者模式模式
- python 生產者消費者模式Python模式
- Python並行程式設計(六):多執行緒同步之queue(佇列)實現生產者-消費者模型Python並行行程程式設計執行緒佇列模型
- 九、生產者與消費者模式模式
- 多執行緒必考的「生產者 - 消費者」模型,看齊姐這篇文章就夠了執行緒模型
- Python並行程式設計(五):多執行緒同步之event(事件)實現簡易的生產者-消費者模型Python並行行程程式設計執行緒事件模型
- Java中的設計模式(二):生產者-消費者模式與觀察者模式Java設計模式
- Thinking in Java---執行緒通訊+三種方式實現生產者消費者問題ThinkingJava執行緒
- 讀者寫者與生產者消費者應用場景
- 併發設計模式---生產者/消費者模式設計模式
- 從一次生產消費者的bug看看執行緒池如何增加執行緒執行緒
- 生產者消費者
- Python並行程式設計(三):多執行緒同步之semaphore(訊號量)實現簡易生產者-消費者模型Python並行行程程式設計執行緒模型
- 「Kafka應用」PHP實現生產者與消費者KafkaPHP
- Java實現生產者和消費者Java
- 阻塞佇列和生產者-消費者模式佇列模式