用阻塞佇列和執行緒池簡單實現生產者和消費者場景

2021-08-19 00:05:54 字數 1196 閱讀 2067

本例子僅僅是博主學習阻塞佇列和後的一些小實踐,並不是真正的應用場景!

生產者消費者場景是我們應用中最常見的場景,我們可以通過reentrantlock的condition和對執行緒進行wait,notify同通訊來實現生產者和消費者場景,前者可以實現多生產者和多消費者模式,後者僅可以實現一生產者,一消費者模式。

今天我們就利用阻塞佇列來實現下生產者和消費者模式(裡面還利用了執行緒池)。

看過我關於阻塞佇列博文的朋友已經知道,阻塞佇列其實就是由reentrantlock實現的!

場景就不描述了,為簡單的多生產者和多消費者!

上**:

生產線程:

public

class

productthread

extends

thread

public

void

run() catch (interruptedexception e)

}}

消費執行緒:

public

class

consumerthread

extends

thread

public

void

run() catch (interruptedexception e)

}}

主線程(主方法):

public

class productandconsumer

productpool.shutdown();

consumerpool.shutdown();

}}

上面的**,我為生產者和消費者分別開了執行緒池,因為在實際的應用中可能出現生產者和消費者不對等的情況,所以我們應該根據實際情況來設定執行緒池的引數,以適應不同場景!

在建立執行緒池的時候要加乙個飽和處理的方式,我們上一節寫執行緒池的飽和處理的時候有提及到,如果不加引數,會預設選擇丟擲異常,我上面選擇的飽和策略是將飽和的任務交給呼叫執行緒(即主線程)處理,這個也應該根據實際情況來定,我們同樣可以實現rejectedexecutionhandler介面,自己來定義這個飽和異常!

以上僅是博主學習自己寫的例子,可能在一些情況下考慮的不周到,還請指教!

2018.4.18 21:31

13 執行緒池常用的阻塞佇列有哪些?

執行緒池內部結構 執行緒池的內部結構主要由四部分組成,如圖所示。阻塞佇列 執行緒池中的這四個主要組成部分最值得我們關注的就是阻塞佇列了,如 所示,不同的執行緒池會選用不同的阻塞佇列。左側是執行緒池,右側為它們對應的阻塞佇列,你可以看到 5 種執行緒池對應了 3 種阻塞佇列,我們接下來對它們進行逐一的...

用 Python 實現的執行緒池

用 python 實現的執行緒池 用 python 實現的執行緒池 軟體技術 lhwork 發表於 2007 2 1 8 53 26 為了提高程式的效率,經常要用到多執行緒,尤其是io等需要等待外部響應的部分。執行緒的建立 銷毀和排程本身是有代價的,如果乙個執行緒的任務相對簡單,那這些時間和空間開銷...

用python實現的執行緒池

python3標準庫里自帶執行緒池threadpoolexecutor 和程序池processpoolexecutor 當然也可以自己寫乙個threadpool。coding utf 8 import queue import threading import sys import time imp...