摘要:一簡介多線程環境下,我們經常需要多個線程的并發和協作。這個時候,就需要了解一個重要的多線程并發協作模型生產者消費者模式。對于生產者沒有生產產品之前,消費者要進入等待狀態。分析不足在生產者消費者問題中,僅有是不夠的。
一、簡介
多線程環境下,我們經常需要多個線程的并發和協作。
這個時候,就需要了解一個重要的多線程并發協作模型 "生產者 / 消費者模式 "。
模式簡圖
生產者:負責生產數據的模塊(模塊可能是:方法、對象、線程、進程)。
消費者:是負責處理數據的模塊(模塊可能是:方法、對象、線程、進程)。
緩沖區: 消費者不能直接使用生產者的數據,它們之間有個“緩沖區”。
緩沖區是實現并發的核心
生產者將生產好的數據放入“緩沖區”
消費者從“緩沖區”拿要處理的數據。
二、優點2.1 解耦
2.1.1 耦合:如果生產者直接調用消費者的某個方法,生產者則對消費者產生依賴
生活寄郵件例子:
@寄件人(生產者)
@郵筒(緩沖區)
@收件人(消費者)
寄件人如果不使用郵箱,ta必須得把信直接交給郵遞員(某個方法),才能送到收件人,這就產生你和郵遞員之間的依賴
2.1.2 解耦:生產者不需要和消費者直接打交道。
2.2 支持并發(concurrency)
2.2.1 緩沖區的優點:
對于生產者:生產者線程只需要往緩沖區里面放置數據,無需管消費者消費的情況。
對于消費者:消費者只需從緩沖區拿數據處理,無需管生產者生產的情況
2.3 解決忙閑不均,提高效率對于消費者:當生產者生產數據緩慢時,緩沖區仍有數據,不影響消費者消費
對于生產者:消費者處理數據慢時,生產者仍然可以繼續往緩沖區里面放置數據 。
三、應用場景
線程并發協作(也叫線程通信),通常用于生產者/消費者模式,情景如下:
共享資源:生產者和消費者共享同一個資源,并且生產者和消費者之間相互依賴,互為條件。
對于生產者:沒有生產產品之前,消費者要進入等待狀態。而生產了產品之后,又需要馬上通知消費者消費。
對于消費者:在消費之后,要通知生產者已經消費結束,需要繼續生產新產品以供消費。
分析不足:在生產者消費者問題中,僅有synchronized是不夠的。
synchronized可阻止并發更新同一個共享資源,實現了同步;
synchronized不能用來實現不同線程之間的消息傳遞(通信)
實現需要的主要方法:
“架構設計”中,會大量使用這個模式。暫時作為了解
四、總結
略
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/75589.html
摘要:程序執行時,至少會有一個線程在運行,這個運行的線程被稱為主線程。程序的終止是指除守護線程以外的線程全部終止。多線程程序由多個線程組成的程序稱為多線程程序。線程休眠期間可以被中斷,中斷將會拋出異常。 線程 我們在閱讀程序時,表面看來是在跟蹤程序的處理流程,實際上跟蹤的是線程的執行。 單線程程序 在單線程程序中,在某個時間點執行的處理只有一個。 Java 程序執行時,至少會有一個線程在運行...
摘要:生產者消費者模式是一個經典的多線程設計模式,它為多線程的協作提供了良好的解決方案。生產者消費者模式中的內存緩沖區的主要功能是數據在多線程間的共享。 生產者-消費者模式是一個經典的多線程設計模式,它為多線程的協作提供了良好的解決方案。在生產者-消費者模式中,通常有兩類線程,即若干個生產者線程和若干個消費者線程。生產者線程負責提交用戶請求,消費者線程負責處理用戶請求。生產者和消費者之間通過...
摘要:在生產者與消費者之間的緩沖區稱之為倉庫。生產者負責往倉庫運輸商品,而消費者負責從倉庫里取出商品,這就構成了生產者消費者模式。中的多線程編程在實現生產者消費者模式之前,我們先學習下中的多線程編程。 什么是生產者消費者模式 在軟件開發的過程中,經常碰到這樣的場景:某些模塊負責生產數據,這些數據由其他模塊來負責處理(此處的模塊可能是:函數、線程、進程等)。產生數據的模塊稱為生產者,而處理數據...
摘要:本文探討并發中的其它問題線程安全可見性活躍性等等。當閉鎖到達結束狀態時,門打開并允許所有線程通過。在從返回時被叫醒時,線程被放入鎖池,與其他線程競爭重新獲得鎖。 本文探討Java并發中的其它問題:線程安全、可見性、活躍性等等。 在行文之前,我想先推薦以下兩份資料,質量很高:極客學院-Java并發編程讀書筆記-《Java并發編程實戰》 線程安全 《Java并發編程實戰》中提到了太多的術語...
閱讀 4160·2021-11-22 13:52
閱讀 2075·2021-09-22 15:12
閱讀 1121·2019-08-30 15:53
閱讀 3455·2019-08-29 17:12
閱讀 2190·2019-08-29 16:23
閱讀 1647·2019-08-26 13:56
閱讀 1772·2019-08-26 13:44
閱讀 1880·2019-08-26 11:56