在之前接觸過pv操作的,應該對於生產者和消費者的情況有乙個了解,這裡學到多執行緒同步的時候,最恰當的乙個例子。pv操作就不多做解釋。
/**
* 生產者和消費者
* @author bobo
* */
public class producerconsumer
}//產品-窩頭
class wotou
public string tostring()
}//同步棧,產品盛放的容器
class syncstack catch (interruptedexception e)
} this.notifyall();//通知消費者,可使用產品
arrwt[index]=wt;
index++;//放入產品 }
//向容器中拿產品時,其他執行緒不能使用,已經被鎖定
public synchronized wotou pop() catch (interruptedexception e)
} this.notifyall();//通知生產者,可以進行生產
index--;
return arrwt[index];//棧中有空位 }}
//生產者,向容器中放產品
class producer implements runnable
public void run() catch (interruptedexception e)
} }}//消費者,從容器中取產品
class consumer implements runnable
public void run() catch (interruptedexception e)
} }}
有乙個容器可以裝產品,兩邊是生產者和消費者,可以是乙個也可以是多個。他們為了保證生產者放乙個,消費者拿乙個,同時也不會出現,生產者還沒有放,消費者就可以去拿了,那會使容器中的產品出現負數,這樣顯然是不對的。
使用synchronized鎖定**塊,讓生產者向容器放東西的時候,消費者還不能拿到這個產品。
補充:notify
()/notifyall()
通知,在生產者和消費者這個問題上,當生產者產生產品以後,可以通過訊號量,通知消費者,它已經獲得了資源。可以進行消費了。
防止大家都在等待,而造成執行緒阻塞。
wait
()和sleep
()區別
wait
()是object
類中的方法,之後其他人可以使用
sleep
()是thread
類的方法,之後其他人也不可以使用
多執行緒 生產者和消費者
生產者 消費者問題 生產者向產品區里放產品,當產品區里滿了,需要等待 消費者從產品區里取產品消耗,當產品區里空了,需要等待。public class producerandconsumer 消費者 static class consumer implements runnable catch int...
多執行緒 生產者和消費者
前面說過,每個執行緒都有自己的資源,但是 區是共享的,即每個執行緒都可以執行相同的函式。這可能帶來的問題就是幾個執行緒同時執行乙個函式,導致資料的混亂,產生不可預料的結果,因此我們必須避免這種情況的發生。c 提供了乙個關鍵字lock,它可以把一段 定義為互斥段 critical section 互斥...
多執行緒 生產者消費者
這個就不多說了,直接上 include include using namespace std const unsigned short size of buffer 10 緩衝區長度 unsigned short productid 0 產品號 unsigned short consumeid 0...