国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Condition 實(shí)現(xiàn)消費(fèi)者生產(chǎn)者

hightopo / 3293人閱讀

摘要:生產(chǎn)生成數(shù)據(jù),通知消費(fèi)者現(xiàn)在條數(shù)生產(chǎn)者判斷現(xiàn)在含有的數(shù)據(jù)大于不需要再生產(chǎn)消費(fèi)者無法消費(fèi)到數(shù)據(jù),處于等待狀態(tài)消費(fèi)數(shù)據(jù)

# -*- coding:utf-8 -*-
""" Created by FizLin
     https://github.com/Fiz1994
"""

# Consume one item
# with cv:
#     while not an_item_is_available():
#         cv.wait()
#     get_an_available_item()
#
# # Produce one item
# with cv:
#     make_an_item_available()
#     cv.notify()


from threading import Thread, Condition
import time

queue = []
MAX_NUM = 10
condition = Condition()

def producer():
    global queue
    while True:
        condition.acquire()
        if len(queue) <= 0:
            # 生產(chǎn)
            queue.extend([i for i in range(10)])
            print("生成數(shù)據(jù),通知消費(fèi)者 現(xiàn)在條數(shù):", len(queue))
            condition.notify()
            condition.wait()
        else:
            print("生產(chǎn)者判斷現(xiàn)在含有的數(shù)據(jù): 大于0 不需要再生產(chǎn)", len(queue))
            condition.notify()

        condition.release()
        time.sleep(1)


def consumer():
    global queue
    while True:
        condition.acquire()
        if len(queue) <= 0:
            print("消費(fèi)者無法消費(fèi)到數(shù)據(jù),處于等待狀態(tài)")
            condition.wait()
        else:
            print("消費(fèi)數(shù)據(jù):", queue.pop(0))
            time.sleep(1)
            condition.notify()
        condition.release()




p = Thread(target=producer)
c = Thread(target=consumer)
p.start()
c.start()


文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/40657.html

相關(guān)文章

  • Java基礎(chǔ)學(xué)習(xí)——多線程(線程間通信-生產(chǎn)消費(fèi)代碼示例)

    摘要:提供了多線程升級(jí)方案將同步替換成了顯示的操作。線程間通信接口可以替代傳統(tǒng)的線程間通信,用替換,用替換,用替換。商品執(zhí)行上述代碼,觀察結(jié)果可以看到,多個(gè)線程同時(shí)生產(chǎn)消費(fèi),由于指定喚醒互異線程,因此并不會(huì)引起錯(cuò)誤。 JDK 1.5提供了多線程升級(jí)方案將同步synchronized替換成了顯示的Lock操作。可以實(shí)現(xiàn)喚醒、凍結(jié)指定的線程。 Lock接口Lock 實(shí)現(xiàn)提供了比使用 synchr...

    FuisonDesign 評(píng)論0 收藏0
  • BlockingQueue與Condition原理解析

    摘要:最后一直調(diào)用函數(shù)判斷節(jié)點(diǎn)是否被轉(zhuǎn)移到隊(duì)列上,也就是中等待獲取鎖的隊(duì)列。這樣的話,函數(shù)中調(diào)用函數(shù)就會(huì)返回,導(dǎo)致函數(shù)進(jìn)入最后一步重新獲取鎖的狀態(tài)。函數(shù)其實(shí)就做了一件事情,就是不斷嘗試調(diào)用函數(shù),將隊(duì)首的一個(gè)節(jié)點(diǎn)轉(zhuǎn)移到隊(duì)列中,直到轉(zhuǎn)移成功。 ?我在前段時(shí)間寫了一篇關(guān)于AQS源碼解析的文章AbstractQueuedSynchronizer超詳細(xì)原理解析,在文章里邊我說JUC包中的大部分多線程相...

    TalkingData 評(píng)論0 收藏0
  • AbstractQueuedSynchronizer理解之四(Condition

    摘要:總結(jié)在一開是的例子中,假設(shè)有兩個(gè)線程,分別代表生產(chǎn)者和消費(fèi)者線程,生產(chǎn)消費(fèi)元素的隊(duì)列容量為。 什么是Condition Condition必須要和獨(dú)占鎖一起使用,獨(dú)占鎖代替了原來的synchronized,Condition代替了原來的Object中的監(jiān)視器方法(wait, notify and notifyAll);一個(gè)Lock可以對(duì)應(yīng)多個(gè)Condition,這樣線程之間可以按照條件...

    RiverLi 評(píng)論0 收藏0
  • AbstractQueuedSynchronizer理解之四(Condition

    摘要:總結(jié)在一開是的例子中,假設(shè)有兩個(gè)線程,分別代表生產(chǎn)者和消費(fèi)者線程,生產(chǎn)消費(fèi)元素的隊(duì)列容量為。 什么是Condition Condition必須要和獨(dú)占鎖一起使用,獨(dú)占鎖代替了原來的synchronized,Condition代替了原來的Object中的監(jiān)視器方法(wait, notify and notifyAll);一個(gè)Lock可以對(duì)應(yīng)多個(gè)Condition,這樣線程之間可以按照條件...

    leiyi 評(píng)論0 收藏0
  • 從0到1實(shí)現(xiàn)自己的阻塞隊(duì)列(下)

    摘要:在上一篇文章從到實(shí)現(xiàn)自己的阻塞隊(duì)列上中,我們已經(jīng)實(shí)現(xiàn)了一個(gè)可以使用的阻塞隊(duì)列版本。插入鎖隊(duì)列未滿的條件變量彈出鎖隊(duì)列非空的條件變量最后我們要對(duì)和方法中的調(diào)用做出一些調(diào)整。 在上一篇文章《從0到1實(shí)現(xiàn)自己的阻塞隊(duì)列(上)》中,我們已經(jīng)實(shí)現(xiàn)了一個(gè)可以使用的阻塞隊(duì)列版本。在這篇文章中,我們可以繼續(xù)我們的冒險(xiǎn)之旅,將我們的阻塞隊(duì)列提升到接近JDK版本的水平上。 更進(jìn)一步優(yōu)化效率 我們一直使用的...

    XFLY 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

hightopo

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<