多线程就是多条线程,多条线程一起工作避免不了资源抢占的问题,互斥锁之类的同步机制是为了避免这种问题。
什么场景下需要使用多线程。
比如大家最常用的迅雷下载,如果只是单线程工作,将可能出现界面响应缓慢,卡死之类的问题,造成用户体验差。
如果我们做一个下载器,用多线程工作,多线程负责下载之类的耗时操作,主线程展示界面,响应用户事件。
用户下载一个东西A,就开辟一条线程A去处理,再下载一个东西B就再开一条线程B,因为A、B线程互不影响,各自独立,
如果需要使用到可能都会用到的变量,就加上互斥锁去同步。
想到一个场景,一个3房一厅的商品房,假如3个房间分别住着一个人,他们分别代号A、B、C(3个不同的线程),客厅(主界面)代号M。
客厅里面只有一个吹风机,几把门锁。
某天早上起来,A拿着吹风机吹头发,B急着上班,表示让他先吹,A同意了,把吹风机让给了B。C这时候不乐意了,
我要去见女友,也要吹头发,让我先吹,B不答应。然后B、C开始争论,最后在客厅打了起来,打坏了很多东西,
这时候邻居(指代用户)想过来借水喝,结果客厅都站不住脚,就走了(程序卡死,用户无法使用)。
后来3个人想到一招,客厅不是有锁么,用锁!于是有天早上C先起来,就把吹风机和锁拿走,进去自己房间吹头发,顺便把门锁上。
这时候B想过来抢吹风机,发现门被锁了,进不去,只能在门口等着,A来了,也只能在门口等。
终于C吹完了,把吹风机和锁丢了出来,A、B去抢,A先拿到了吹风机,拿了一把锁,马上跑回房间锁门,吹头发。B只能继续等。
等A、C都去上班了,才等到B。B心里想,下次我得起早点先拿到钥匙和锁才行。