Python_继承threading实现自己的线程类——六月十四

当使用Thread类创建线程时,可以通过继承Thread类来创建自定义的线程类,并重写其中的方法。下面是一个形象的例子,用来模拟电影院售票系统的并发处理。

from threading import Thread, Lock

# 全局变量,表示电影票数量
ticket_count = 100

# 创建锁对象,用于线程同步
lock = Lock()


class TicketSeller(Thread):
    """
    售票员线程类
    """

    def __init__(self, name):
        super().__init__()
        self.name = name

    def run(self):
        global ticket_count
        while True:
            # 获取锁
            lock.acquire()
            if ticket_count > 0:
                # 模拟售票过程
                ticket_count -= 1
                print(f"{self.name}售出1张票,剩余票数: {ticket_count}")
            else:
                print("票已售罄,停止售票!")
                # 释放锁
                lock.release()
                break
            # 释放锁
            lock.release()


def main():
    # 创建售票员线程对象
    seller1 = TicketSeller("售票员1")
    seller2 = TicketSeller("售票员2")

    # 启动售票员线程
    seller1.start()
    seller2.start()

    # 等待售票员线程执行完毕
    seller1.join()
    seller2.join()

    print("所有售票员线程执行完毕")


if __name__ == '__main__':
    main()

在上述代码中,我们模拟了一个电影院售票系统。首先,定义了一个全局变量ticket_count,表示电影票的数量,初始为100。

然后,创建了一个Lock对象lock,用于线程同步。

接下来,定义了一个TicketSeller类,继承自Thread类,**并重写run方法,你可以在自定义的线程类中定义线程的执行逻辑。然后,通过调用start方法,实际上是在启动一个新线程,并在新线程中执行你所定义的run方法。**在run方法中,通过acquire方法获取锁,然后判断电影票的数量是否大于0。如果大于0,则模拟售票过程,将电影票数量减1,并打印出售票信息。否则,打印出票已售罄的信息,释放锁并结束线程。

main函数中,创建了两个TicketSeller对象,分别代表两个售票员。然后,通过调用start方法启动售票员线程。售票员线程开始执行各自的run方法,并在执行过程中进行售票和打印。

最后,使用join方法等待售票员线程执行完成,确保主线程等待所有售票员线程执行完毕后再继续执行。最后打印出所有售票员线程执行完毕的提示。

通过继承Thread类并重写其中的方法,我们可以自定义线程类,并根据具体需求编写线程的执行逻辑。这样可以实现电影院售票系统的并发处理,

确保线程安全和数据一致性。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值