天天看點

線程協作

線程通信 

應用場景:生産者和消費者模式
  • 假設倉庫中隻能存放一件産品,生産者将生産出來的産品放入倉庫,消費者将倉庫中産品取走消費;
  • 如果倉庫中沒有産品,則生産者将産品放入倉庫,否則停止生産并等待,直到倉庫中的産品被消費取走為止;
  • 如果倉庫中放有産品,則消費者可以将産品取走消費,否則停止消費并等待,直到倉庫中再次放入産品為止;
線程通信 - 分析
  • 這是一個線程同步問題,生産者和消費者共享一個資源,而是生産了産品之後,又需要馬上通知消費者消費;
  • 對于消費者,在消費之後,要通知生産者已經結束消費,需要生産新的産品以供消費;
  • 在生産消費者問題中,僅有synchronized是不夠的;
  • synchronized 可阻止并發更新同一個共享資源,實作了同步;
  • synchronized 不能用來實作不同線程之間的消息傳遞(通信);
方法
方法名 作用
wait() 表示線程一直等待,直到其他線程通知,與sleep不同,會釋放鎖
wait(long timeOut) 指定等待的毫秒數
notify() 喚醒一個處于等待狀态的線程
notifyAll() 喚醒同一個對象上所有調用wait()方法的線程,優先級别高的線程優先排程
均是Object類的方法,都隻能在同步方法或者同步代碼塊中使用,否則會抛出異常IllegalMonitorStateException
 解決方式1:生産/消費者模式-管程法
線程協作

繼續閱讀