多生產者,多消費者的問題。
if判斷標記,只有一次,會導致不該執行的執行緒執行了。出現了資料錯誤的情況。
while判斷標記,解決了執行緒獲取執行權後,是否要執行!
notify:只能喚醒乙個執行緒,如果本方喚醒了本方,沒有意義。而且while判斷標記+notify會導致死鎖。
notifyall解決了本方執行緒一定會喚醒對方執行緒的問題。
**如下:
/**
* 操作資源物件
* @author fanyuan
* */
class resource
catch(interruptedexception e){}// t1 t0
this.name = name + count;//烤鴨1 烤鴨2 烤鴨3
count++;//2 3 4
system.out.println(thread.currentthread().getname()+"...生產者..."+this.name);//生產烤鴨1 生產烤鴨2 生產烤鴨3
flag = true;
notifyall();
} public synchronized void out()// t3
catch(interruptedexception e){} //t2 t3
system.out.println(thread.currentthread().getname()+"...消費者........"+this.name);//消費烤鴨1
flag = false;
notifyall(); }}
/** * 生產者
* @author fanyuan
* */
class producer implements runnable
public void run() }
}/**
* 消費者
* @author fanyuan
* */
class consumer implements runnable
public void run() }
}class producerconsumerdemo
}
執行結果:
整理自示例**
Java多執行緒之消費者生產者模式
這個例項應該是學習執行緒的乙個經典例子,生產者和消費者模式。寫的很好,詳細請看內容。author shijin 生產者與消費者模型中,要保證以下幾點 1 同一時間內只能有乙個生產者生產 生產方法加鎖sychronized 2 同一時間內只能有乙個消費者消費 消費方法加鎖sychronized 3 生...
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...