美文网首页
多线程:创建两个线程,其中一个输出1-52,另外一个输出A-Z。

多线程:创建两个线程,其中一个输出1-52,另外一个输出A-Z。

作者: 周英杰Anita | 来源:发表于2020-04-19 12:33 被阅读0次

    题目:创建两个线程,其中一个输出1-52,另外一个输出A-Z。输出格式要求:12A 34B 56C 78D 依次类推

    python3解法:

    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    import threading
    import time
    
    
    def f1():
        """
        执行f1的时候需要锁住lock1,因此此前lock1必须处于已解锁状态,否则阻塞
        只有当执行完毕一次f1之后,才能解锁lock2,f2才能继续执行
        """
        for i in range(1, 52, 2):
            # 锁住lock1,如果此时lock1不是处于未上锁状态,则等待lock1解锁之后才能往下进行
            lock1.acquire()
            # print()函数里面是默认换行的,具体换行参数是end="\n"。so,如果我们把参数end="\n"换成end=''相当于去掉了换行符\n 
            print(i, end = '')
            print(i+1, end = '')
            # 解锁lock2
            lock2.release()
    
    def f2():
        """
        执行f2的时候需要锁住lock2,因此此前lock2必须处于已解锁状态,否则阻塞
        只有当执行完毕一次f2之后,才能解锁lock1,f1才能继续执行
        """
        for i in range(26):
            # 锁住lock2,如果此时lock2不是处于未上锁状态,则等待lock2解锁之后才能往下进行
            lock2.acquire()
            # ord() 函数是 chr() 函数的配对函数,它以一个字符(长度为1的字符串)作为参数,返回对应的 ASCII 数值
            print(char(i + ord('A')))
            lock1.release()
            
    if __name__ == '__main__':
        # 创建两个线程锁
        lock1 = threading.Lock()
        lock2 = threading.Lock()
        # 创建两个线程
        thread1 = threading.Thread(target=f1)
        thread2 = threading.Thread(target=f2)
        # 先锁住lock2,也就是先不让f2执行
        lock2.acquire()
        # 当f1执行1次之后,lock2才会解锁f2才能执行
        thread1.start()
        thread2.start()
    

    参考博客:https://blog.csdn.net/besmarterbestronger/article/details/97616789

    相关文章

      网友评论

          本文标题:多线程:创建两个线程,其中一个输出1-52,另外一个输出A-Z。

          本文链接:https://www.haomeiwen.com/subject/ilpubhtx.html