生產者消費者模式--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執行緒
- 多執行緒 -- 移動檔案(生產者,消費者模式應用)執行緒模式
- Java多執行緒14:生產者/消費者模型Java執行緒模型
- Java 多執行緒(Java.Thread)------ 執行緒協作(生產者消費者模式)Java執行緒thread模式
- 多執行緒之生產者消費者執行緒
- 用Python多執行緒實現生產者消費者模式Python執行緒模式
- Java多執行緒——消費者與生產者的關係Java執行緒
- java多執行緒:執行緒間通訊——生產者消費者模型Java執行緒模型
- JAVA執行緒消費者與生產者模型Java執行緒模型
- Java 多執行緒基礎(十二)生產者與消費者Java執行緒
- Java 多執行緒學習(執行緒通訊——消費者和生產者)Java執行緒
- Java多執行緒之併發協作生產者消費者設計模式Java執行緒設計模式
- Java多執行緒-併發協作(生產者消費者模型)Java執行緒模型
- 多執行緒下的生產者和消費者-BlockingQueue執行緒BloC
- Java多執行緒程式設計(同步、死鎖、生產消費者問題)Java執行緒程式設計
- python執行緒通訊與生產者消費者模式Python執行緒模式
- 執行緒間的協作(2)——生產者與消費者模式執行緒模式
- Python-多執行緒及生產者與消費者Python執行緒
- python中多執行緒消費者生產者問題Python執行緒
- 多執行緒-生產者消費者問題程式碼1執行緒
- 關於Java多執行緒實現生產者和消費者的問題Java執行緒
- python多執行緒+生產者和消費者模型+queue使用Python執行緒模型
- 多執行緒併發如何高效實現生產者/消費者?執行緒
- C#多執行緒學習(三) 生產者和消費者C#執行緒
- python 多執行緒實現生產者與消費者模型Python執行緒模型
- 多執行緒-生產者消費者之等待喚醒機制執行緒
- C# 多執行緒學習(3) :生產者和消費者C#執行緒
- 生產者消費者模式模式
- java多執行緒之消費生產模型Java執行緒模型
- java多執行緒總結六:經典生產者消費者問題實現Java執行緒
- 使用Python佇列和多執行緒實現生產者消費者Python佇列執行緒
- 生產消費者模式模式
- java學習回顧---生產者與消費者問題以及多執行緒補充Java執行緒
- java編寫生產者/消費者模式的程式。Java模式
- Java 生產者消費者模式詳細分析Java模式
- java 執行緒池、多執行緒併發實戰(生產者消費者模型 1 vs 10) 附案例原始碼Java執行緒模型原始碼
- 多執行緒-生產者消費者問題程式碼2並解決執行緒安全問題執行緒