target:线程执行函数
args:函数需要的参数,必须以元组的方式传参
name:指定子线程的名字
daemon:设置是否为守护线程,默认为False,若为守护线程则为True
t.isAlive()
功能:判断线程是否还活着
t.getName() 获取线程的名字
t.setName() 设置线程的名字
t.start() 开启线程,线程准备就绪
t.isDaemon() 判断某个线程是否为后台线程
t.join([timeout]): 阻塞当前上下文环境的线程,直到调用此方法的线程终止或
到达指定的timeout
lock.acquire() #上锁
lock.release() #释放锁
lock = threading.Lock()
使用 with lock
with内部实现了enter()和exit()执行语句之前调用enter方法,退出的时候调用exit
使用递归锁来解决死锁的问题。
递归锁的实现原理:
在递归锁中不但存在lock还存在counter计数,每当acquire()一次锁,counter计数就进行
加1处理,每当release() 一次锁,counter计数减1处理,直到counter计数为0的情况下
所有线程重新去抢占资源。
信号量的实现方式:
在内部有一个counter计数器,每当我们 s.acquire()一次,计数器就进行减1处理
每当 s.release()一次,计数器就进行加1处理,当计数器为0的时候其他线程的就处于
等待的状态counter的值就是同一时间可以开启线程的个数
建议使用with