這個例項應該是學習執行緒的乙個經典例子,生產者和消費者模式。**寫的很好,詳細請看內容。
/*@author shijin
* 生產者與消費者模型中,要保證以下幾點:
* 1 同一時間內只能有乙個生產者生產 生產方法加鎖sychronized
* 2 同一時間內只能有乙個消費者消費 消費方法加鎖sychronized
* 3 生產者生產的同時消費者不能消費 生產方法加鎖sychronized
* 4 消費者消費的同時生產者不能生產 消費方法加鎖sychronized
* 5 共享空間空時消費者不能繼續消費 消費前迴圈判斷是否為空,空的話將該執行緒wait,釋放鎖允許其他同步方法執行
* 6 共享空間滿時生產者不能繼續生產 生產前迴圈判斷是否為滿,滿的話將該執行緒wait,釋放鎖允許其他同步方法執行
*/
//主類
class producerconsumer
} //
class mantou
public string tostring()
}
//共享棧空間
class stackbasket
this.notify();
}catch(interruptedexception e)catch(illegalmonitorstateexception e)
sm[index] = m;
index++;
system.out.println("生產了:" + m + " 共" + index + "個饅頭");
} /**
* show 消費方法
* show 該方法為同步方法,持有方法鎖
* show 首先迴圈判斷空否,空的話使該執行緒等待,釋放同步方法鎖,允許生產;
* show 當不空時首先喚醒正在等待的生產方法,但是也只能讓其進入就緒狀態
* show 等消費結束釋放同步方法鎖後生產才能持有該鎖進行生產
* @param b true 表示顯示,false 表示隱藏
* @return 沒有返回值
*/
public synchronized mantou pop()
this.notify();
}catch(interruptedexception e)catch(illegalmonitorstateexception e)
index--;
system.out.println("消費了:---------" + sm[index] + " 共" + index + "個饅頭");
return sm[index];
} }
class producer implements runnable
/**
* show 生產程序.
*/
public void run()catch(interruptedexception e)
} }
}
class consumer implements runnable
/**
* show 消費程序.
*/
public void run()catch(interruptedexception e)
} }
}
java多執行緒之消費者生產者模式
author shijin 生產者與消費者模型中,要保證以下幾點 1 同一時間內只能有乙個生產者生產 生產方法加鎖sychronized 2 同一時間內只能有乙個消費者消費 消費方法加鎖sychronized 3 生產者生產的同時消費者不能消費 生產方法加鎖sychronized 4 消費者消費的同...
Java 多執行緒之生產者消費者模型
package com.yuanlief public class main 共享資料類 class mydata 共享資料控制類 class sharedata catch interruptedexception e this.data data writeable false 標記已經生產 n...
java多執行緒(生產者 消費者)
if isempty 當生產者生產出來商品需要喚醒消費者消費,可進行如下控制 vector.vector.notify 喚醒消費方法還用到了同步的方法,具體語法如下 synchronized vector.vector 程式源 如下 public class thread01 public stat...