|
|
记录自己对多线程的理解 (๑• . •๑)
线程与影分身
多线程就是鸣人的影分身之术
,可能不大恰当,但是非常容易理解。
平时一个鸣人会一个人,但是遇到强敌时,他会使用影分身之术
,召唤自己的兄弟来帮助他一起来战斗。这样,他就从一个人战斗变成多个人战斗。
多线程也是这样,平时一个线程去做某件事,当使用多线程后,就会有很多个线程按照命令去做事,就像影分身一样。
Python使用
鸣人和使用需要先结印
Python 中需要先调用,让我们看一个简单的例子:
|
|
Output
|
|
可以看出用法非常简单,只需要先导入threading
模块,然后实例化一个线程对象,注意args是
元祖
t = threading.Thread(target=shadow, args=(i,))
线程被创建之后并不会马上运行,需要手动调用 start()
, join()
让调用它的线程一直等待直到执行结束:
|
|
查看线程名字
上述例子中,我们只知道产生了多个线程,但还是并不知道具体是哪个线程,如果某个线程出错了,我们没法去追踪,所以我们可以给线程加上名字。
|
|
Out:
|
|
当然,你可以这样
|
|
Out
|
|
你可以看到在所有创建的线程结束后,我们打印当前线程名字,就是主线程MainThread
什么时候使用join
刚开始学多线程时,有个问题困扰了我很久,就是什么时候使用join()
缕一缕步骤:
- 主线程中创建子线程t
- 开始线程
t.star()
- 调用
t.join()
- 阻塞:等待子线程t结束后,再执行接下来的任务
也就是说使用了join()
后会阻塞当前的线程,只有这个线程执行完毕后才会接着走。要是一直不结束呢?你可以加上超时时间,如t.join(timeout=10)
后续
鸣人使用影分身后,产生了A、B、C三个小鸣人,鸣人可以使用join()
方法,让B在A耗尽查克拉之后再进行攻击,如果没有使用join()
,那么就会是这样的场景,大家一起上
这个时候如果鸣人命令A、B同时去写家庭作业,那么可能会产生什么情况呢?A先写还是B先写,大家可以想想。
下一期会说说 锁