老师您好,关于多线程的这段代码有些地方不太懂

老师您好,关于多线程的这段代码有些地方不太懂


http://img1.sycdn.imooc.com//climg/60ab59b208fb4b8c11740667.jpg

1、现在创建了7个线程在同时执行work()函数,在随机删除列表元素的时候,多个线程中的work()函数不会随机生成同一个列表元素吗?​

2、老师关于join()阻塞有点不明白,join()阻塞写在子线程下的意思是,阻塞主线程,等待子线程完成后,在执行主线程吗?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕美 2021-05-24 17:03:03

同学,你好!

1、不会的,work()中是在执行完remove和append后再执行的time.sleep()阻塞当前线程执行其他的,因此不会出现同学说的情况

http://img1.sycdn.imooc.com//climg/60ab6b91096b9a4204520246.jpg

2、是的,join()函数用于阻塞程序,让主线程等待子线程任务执行完毕后,再执行主线程,主线程会在调用join()函数的地方等待,直到子线程完成操作后,才可以接着往下执行

祝学习愉快!

  • 提问者 慕田峪6467393 #1

    老师,多个线程同时再用random.choice(list)函数,在随机获取列表元素的时候,不会重复吗?不会随机到同一个元素吗?

    2021-05-24 20:06:25
  • 好帮手慕美 回复 提问者 慕田峪6467393 #2

    同学,你好!不会的,第一个线程在执行时随机获取元素后已经执行remove移除了该元素,第二个线程再执行时列表中就没有该元素了,因此不会随机到同一个元素。

    不会存在多个线程同一时刻执行,只有线程遇到阻塞时才会切换执行另一个线程。

    祝学习愉快!

    2021-05-25 09:58:27
  • 提问者 慕田峪6467393 回复 好帮手慕美 #3

    老师,我一直理解多线程是同步处理一件事,您的意思是说,多线程执行的时候是异步的吗?

    2021-05-25 14:04:17
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师