'''
创建线程方式:
1. Thread(target=xxx,args=(),kwargs={},name=xxx)
2. 自定义线程:
class MyThread1(Thread):
# 重写方法run()
def run(self):
xxxx
只要线程对象启动,则默认调用run方法
线程的方法:
1. setName()
2. getName()
3. setDaemon(True)
4. isDaemon()
5. start()
6. run() 重写但是无需调用,由start()调用
7. join()
'''
import os
import threading
from threading import Thread
from time import sleep
# 设置标志
flag = False
class PlayThread(Thread):
# override 重写
def run(self):
for i in range(5):
print('{}正在播放第{}首歌'.format(self.name, i + 1), os.getpid(), threading.current_thread())
sleep(0.7)
class DownloadThread(Thread):
def run(self):
for i in range(5):
if not flag:
print('{}正在下载第{}首歌'.format(self.name, i + 1), os.getpid(), threading.current_thread())
sleep(1.7)
else:
break
if __name__ == '__main__':
t1 = PlayThread()
t2 = DownloadThread()
# False 不是守护线程
# print(t1.isDaemon())
# print(t2.isDaemon())
# t2.setDaemon(True) # 设置成守护线程 ---》不归当前主线程(进程)管理
# ----》 单独开了一个进程负责守护线程
# 独立的进程又是依附于原来的进程,只要原来的进程结束,即使守护线程的任务还没有完成,也会结束。
# print(t1.isDaemon())
# print(t2.isDaemon())
# 设置线程名字
t1.setName('AAA')
t2.setName('BBB')
t1.start()
t2.start()
for i in range(5):
if i == 3:
flag = True
print('---------->mainthread')
sleep(0.5)