zoukankan      html  css  js  c++  java
  • 同步对象(同步条件Event)

    event = threading.Event()   #创建同步对象

    event.wait()     #同步对象等待状态

    event.set()  #同步对象设置True
    event.clear()    #清除同步对象

    event.wait()  --->捕捉到  event.set() ---> 继续执行   --->event.clear()  清除对象

    例子:

    import threading,time
    class Boss(threading.Thread):
    def run(self):             
    print("BOSS:今晚大家都要加班到22:00。") #7 假如继续运行到这了
    print(event.isSet()) #8 打印下当前设定状态False
    event.set()                #9 设置为True
    time.sleep(5)             #12 睡眠5秒
    print("BOSS:<22:00>可以下班了。") #16 打印此消息
    print(event.isSet())
    event.set()                #17 设置event.set()为True状态,让线程中的event.wait()中捕捉
    class Worker(threading.Thread): #5 假如运行到这
    def run(self):
    event.wait()          #6 event.wait()等待event.set() 这时候这里是等待状态后面不执行 #11 此时5个Worker线程会捕捉到event.set()为True状态,会继续开始接着后面执行
    print("Worker:哎……命苦啊!") #12 5个线程机会同时打印这个消息
    time.sleep(1)          #13 5个线程开始睡眠1 
    event.clear()         #14 清除event.set()状态 此时event.set()为 False
    event.wait()          #15 event.wait()等待event.set()  这时候这里是等待状态后面不执行 #18 捕捉到event.set()为True状态,继续开始接着后面执行
            print("Worker:OhYeah!")    
    if __name__=="__main__":
    event=threading.Event() #1 创建对象
    threads=[]
    for i in range(5):    #2 5 Worker对象放入到列表
    threads.append(Worker())
    threads.append(Boss())  #3 Boss对象放入列表
    for t in threads:
    t.start()       #4 运行线程对象(列表里面的对象先后谁执行,不知道)
    for t in threads:
    t.join()

    结果:

      BOSS:今晚大家都要加班到22:00。
      False
      Worker:哎……命苦啊!
      Worker:哎……命苦啊!
      Worker:哎……命苦啊!
      Worker:哎……命苦啊!
      Worker:哎……命苦啊!
      BOSS:<22:00>可以下班了。
      False
      Worker:OhYeah!
      Worker:OhYeah!
      Worker:OhYeah!
      Worker:OhYeah!
      Worker:OhYeah!

      
  • 相关阅读:
    HTML 特殊符号编码对照表
    C#删除字符串最后一个字符的几种方法
    c# 获取相对路径
    垂直滚动条代码
    Android微信分享功能实例+demo
    android之Itent.ACTION_PICK Intent.ACTION_GET_CONTENT妙用
    Android Camera 使用小结
    onSaveInstanceState和onRestoreInstanceState
    Android中的PopupWindow详解
    Unable to execute dex: java.nio.BufferOverflowException.解决办法
  • 原文地址:https://www.cnblogs.com/ajaxa/p/9122375.html
Copyright © 2011-2022 走看看