线程的疑问

线程的疑问

对于线程的概念还是有些模糊,老师可以用白话的方式讲解一下吗,之前学习听到因为多用户访问静态User对象会造成线程并发。

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

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

1回答
好帮手慕小蓝 2022-06-10 10:27:18

同学你好~

线程简单的可以理解为,相互独立的任务。这里举个小例子:

假如某一天,皇帝想要宴请群臣,点名要满汉全席。此时,显然将近七百道菜不会是一个厨子完成,那么对于满汉全席这个任务来讲,就可以拆分成多个小任务。这里整个筵席就是进程,每个厨子就是线程。

厨子之间相互独立,各自做各自的菜品,互相是不影响的。这就是线程间相互独立的特征。

但是,如果A厨子发现筵席中还没有四喜丸子,自己就去做四喜丸子了。但是在A还没做好的时候,B也发现缺少四喜丸子,他也去做四喜丸子了。当A厨子做完之后,交给传菜的人,菜就被拿去放在筵席上了。此时B也做好了,他并不知道A已经做好了,也把这道菜给了传菜的人,这道菜也被放在筵席上了。此时就会发现,满汉全席本身就不允许有重复菜品的,结果由于A和B两个厨子都对整个筵席做更改,出现了重复。

这里,筵席就是同时被两个线程所共同访问的对象,而A和B两个厨子就是两个线程。此时可以发现,两个线程同时对同一对象进行操作,就出现了问题。这也就是所谓的,并发访问问题。

解决并发访问问题的方式有多种,这里可以采用独占资源的方式,也就是加锁的方式解决。

例如上面的案例中,如果A厨子发现没有四喜丸子,那么他将所有制作四喜丸子的材料都拿走,对资源进行独占。此时即使B厨子也需要做四喜丸子,但是没有材料,那么B厨子只能等A厨子做完,他才能拿到被独占的材料。当A将材料退回的时候,筵席上同时也就多了四喜丸子,B厨子也就不会再做这道菜了,此时就没有重复了。

这里A独占所有材料的过程,就是多线程间加锁的过程,这些被独占的材料就是锁。A和B两个厨子争夺这些材料的过程,就是线程争夺锁标记的过程。

以上就是线程和并发访问的解释,希望可以帮到同学。

祝学习愉快~


  • 提问者 该筱该 #1

    1,程序运行了之后不计算多用户下,是不是有且只有一个线程呢,如果不是,在单人使用下,如何会触发多个线程呢(不知道可不可以用身边的软件来形容一下)
    2,那个丸子的故事,我理解的是多用户同时调用程序的全局静态对象(不做线程处理)才会引发多线程并发,是这样的意思吗

    2022-06-10 11:19:02
  • 好帮手慕小蓝 回复 提问者 该筱该 #2

    同学你好~

    1.同学可以简单的将迅雷当做一个进程,而当同时下载多个文件的时候,每个任务当做一个线程。

    2.其实在丸子的故事里,同学理解的用户,每个用户就是一个线程。所以多个用户就是多个线程,多个线程共同操作一个资源就会发生并发问题。

    祝学习愉快~

    2022-06-10 11:33:40
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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