多線程的優(yōu)點(diǎn):
1 多核利用
2 為單個(gè)任務(wù)建模方便
3 異步處理不同事件,不必盲等
4 現(xiàn)代的UI也需要它
風(fēng)險(xiǎn):
1 同步變量易錯(cuò)誤
2 因資源限制導(dǎo)致線程活躍性問題
3 因2導(dǎo)致的性能問題
用途:
框架,UI,Backend
線程安全的本質(zhì)是什么:
并非是線程和鎖,這些只是基礎(chǔ)結(jié)構(gòu),本質(zhì)是如何控制共享變量訪問的狀態(tài)
什么是線程安全:
就是線程之間的執(zhí)行
還沒有發(fā)生錯(cuò)誤,就是沒有發(fā)生意外
一個(gè)線程安全的類本身封裝了對(duì)類內(nèi)部方法和變量的異步請(qǐng)求,調(diào)用方無需考慮線程安全問題
無狀態(tài)的變量總是線程安全的
原子性:
完整執(zhí)行的單元,如不加鎖控制,則會(huì)發(fā)生競態(tài)條件,如不加鎖的懶漢單例模式,或者復(fù)合操作。
鎖,內(nèi)在鎖,重入:
利用synchronized關(guān)鍵字控制訪問單元,同一線程可以重入鎖內(nèi)部,避免了面向?qū)ο螽a(chǎn)生的問題。同一變量的所有出現(xiàn)場合應(yīng)該使用同一個(gè)鎖來控制。synchronized(lock)。
即使所有方法都用synchronized控制也不能保證線程安全,它可能在調(diào)用時(shí)編程復(fù)合操作。
活躍性和性能問題:
過大的粒度會(huì)導(dǎo)致這個(gè)問題,用鎖進(jìn)行異步控制,導(dǎo)致了線程的順序執(zhí)行。
簡單和性能是一對(duì)矛盾,需要適當(dāng)?shù)娜∩帷2荒茉跊]有考慮成熟的情況下,為了性能去犧牲簡潔性。
要盡量避免耗時(shí)操作,IO和網(wǎng)絡(luò)操作中使用鎖
@2008 楊一. 版權(quán)所有. 保留所有權(quán)利