多线程:生产者消费者问题
1.假設倉庫只能存一件產品,生產者將產品放入倉庫,消費者將產品從倉庫取出
2.倉庫沒有產品,生產者將產品放倉庫,否則停止生產并等待,直到倉庫產品被消費者取走
3.如果倉庫放有產品,消費者可取走,否則停止消費并等待,直到倉庫再次放入產品
===============
線程通信-分析
生產者沒有生產產品之前,要通知消費者等待,生產產品之后,通知消費者消費
消費者消費后通知生產者已經結束消費,需要生產新產品供消費
生產者和消費者問題中,僅有synchronized是不夠的
synchronized可組止并發更新同一個共享資源,實現同步
synchronized不能實現線程之間消息傳遞(通信)
=================
線程通信方法
wait():線程一直等待,直到其他線程通知,與sleep不同,會釋放鎖
wait(long timeout):指定等待的毫秒數
notify():喚醒處于等待狀態的線程
notifyAll():喚醒所有調用wait()方法的線程,優先級別高的線程優先調度
都是Object類方法,都只能在同步方法或同步代碼塊中使用,否則拋出IIIegaIMonitorStateException
============
解決方式一:
管程法
生產者:負責生產數據的模塊(可能是方法,對象,線程,進程);
消費者:負責處理數據的模塊(可能是方法,對象,線程,進程);
緩沖區:消費者不能直接使用生產者的數據,他們之間有緩沖區,生產者將數據放入緩沖區,消費者從緩沖區拿數據
解決方式二:
并發協作模型,信號燈法
總結
以上是生活随笔為你收集整理的多线程:生产者消费者问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: BugkuCTF-Crypto题告诉你个
- 下一篇: C语言 Hello World - C语