数据库 Linxu磁盘 LeetCode leetcodeLCP pandas resultMap generics tree 广告投放系统源码 java常用的包 小程序下拉刷新样式 mysql建表主键自增长 安装mysql python集合 python算法 python函数的调用 java中string java基础学习 java开发环境配置 java写文件 java怎么配置 java的socket通信 java日期类 java日期格式化 linux密码 linux系统如何安装 磁盘分区软件 mac地址修改器 华为一键root工具 魔兽改图工具 游戏python界面编程 小程序游戏源码 相册制作工具 oledbconnection dos命令大全及用法 ps尺子的快捷键 vba下载 优酷网打不开 沙盘sandboxie 血岩碎片有什么用
当前位置: 首页 > 学习教程  > 编程语言

【随笔】【Python】面试题多线程打印

2020/12/28 19:22:14 文章标签:

1.实现一个多线程类,并用该线程类实例化3个线程A,B,C; A线程打印字符A,B线程打印字符B,C线程打印字符C; 启动这3个线程,要求启动线程的顺序为C线程->B线程->A线程,并且最后输出内容为: A …

1.实现一个多线程类,并用该线程类实例化3个线程A,B,C;
A线程打印字符A,B线程打印字符B,C线程打印字符C;
启动这3个线程,要求启动线程的顺序为C线程->B线程->A线程,并且最后输出内容为:
A
B
C
不能用sleep函数,注意考虑线程安全问题。
# conding=utf-8
import threading

class my_thread(threading.Thread):
    def __init__(self,threadID,name,string):
        # chu shi hua
        threading.Thread.__init__(self)
        self.threadID = threadID
        self.name     = name
        self.string   = string
    def run(self):
        
        print("Process_start:" + ' ' +  self.name)
        print_string(self.string)

def print_string(string):
    if string == "C":
        eventC.wait()
        print("Print the string:" + ' ' +  string)
    elif string == "B":
        eventB.wait()
        print("Print the string:" + ' ' +  string)
        eventC.set()
    elif string == "A":
        print("Print the string:" + ' ' + string)
        eventB.set()
    else:
        return 0
       
if __name__=="__main__":
    eventB =  threading.Event()
    eventC =  threading.Event()
    # chuang jian xin xian cheng
    A = my_thread(1,"TA","A")
    B = my_thread(2,"TB","B")
    C = my_thread(3,"TC","C")
        
    C.start()
    B.start()
    A.start()
    A.join()
    B.join()
    C.join()
################################
结果输出:
 Process_start: TC
 Process_start: TB
 Process_start: TA
 Print the string: A
 Print the string: B
 Print the string: C
################################

小贴士:
'*** threading.Event() ***'
 threading.Event() 原理是在线程中立了一个 Flag ,默认值是 False ,当一个或多个线程遇到 event.wait() 方法时阻塞,
 直到 Flag 值 变为 True 。threading.Event() 通常用来实现线程之间的通信,使一个线程等待其他线程的通知 ,把 Event 
 传递到线程对象中。

event.wait()  : 阻塞线程,直到 Flag 值变为 True
event.set()   : 设置 Flag 值为 True
event.clear() : 修改 Flag 值为 False
event.isSet() : 仅当 Flag 值为 True 时返回


本文链接: http://www.dtmao.cc/news_show_550214.shtml

附件下载

上一篇:各种排序

下一篇:浏览器请求缓存

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?