生產者消費者問題是多線程的一個經典問題,它描述是有一塊緩衝區做爲倉庫,生產者能夠將產品放入倉庫,消費者則能夠從倉庫中取走產品。安全
在Java中有四種方法支持同步,其中前三個是同步方法,一個是管道方法。多線程
wait() / nofity()方法是基類Object的兩個方法:併發
await()和signal()的功能基本上和wait() / nofity()相同,徹底能夠取代它們,可是它們和新引入的鎖定機制 Lock 直接掛鉤,具備更大的靈活性。經過在Lock對象上調用newCondition()方法,將條件變量和一個鎖對象進行綁定,進而控制併發程序訪問競爭資源的安全。spa
它是一個已經在內部實現了同步的隊列,實現方式採用的是咱們第2種await() / signal()方法。它能夠在生成對象時指定容量大小。它用於阻塞操做的是put()和take()方法:線程
put()方法:相似於咱們上面的生產者線程,容量達到最大時,自動阻塞。對象
take()方法:相似於咱們上面的消費者線程,容量爲0時,自動阻塞。隊列