成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

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

hightopo / 3308人閱讀

摘要:生產(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)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/40657.html

相關(guān)文章

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

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

    FuisonDesign 評論0 收藏0
  • BlockingQueue與Condition原理解析

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

    TalkingData 評論0 收藏0
  • AbstractQueuedSynchronizer理解之四(Condition

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

    RiverLi 評論0 收藏0
  • AbstractQueuedSynchronizer理解之四(Condition

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

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

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

    XFLY 評論0 收藏0

發(fā)表評論

0條評論

hightopo

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<