Java多線程編程具有以下優(yōu)勢:
1、提高系統(tǒng)的吞吐率(Throughout). 多線程編程可以使一個進(jìn)程有多個并發(fā)(concurrent,即同時進(jìn)行的)的操作。
2、提高響應(yīng)性(Responsiveness).Web服務(wù)器會采用一些專門的線程負(fù)責(zé)用戶的請求處理,縮短了用戶的等待時間。
3、充分利用多核(Multicore)處理器資源. 通過多線程可以充分的利用CPU資源。
1、線程安全(Thread safe)問題.多線程共享數(shù)據(jù)時,如果沒有采取正確的并發(fā)訪問控制措施,就可能會產(chǎn)生數(shù)據(jù)一致性問題,如讀取臟數(shù)據(jù)(過期的數(shù)據(jù)), 如丟失數(shù)據(jù)更新。
2、線程活性(thread liveness)問題.由于程序自身的缺陷或者由資源稀缺性導(dǎo)致線程一直處于非RUNNABLE狀態(tài),這就是線程活性問題,常見的活性故障有以下幾種:
● 死鎖(Deadlock). 類似鷸蚌相爭
● 鎖死(Lockout), 類似于睡美人故事中王子掛了
● 活鎖(Livelock). 類似于小貓咬自己尾巴
● 饑餓(Starvation).類似于健壯的雛鳥總是從母鳥嘴中搶到食物
3、上下文切換(Context Switch). 處理器從執(zhí)行一個線程切換到執(zhí)行另外一個線程。
4、可靠性. 可能會由一個線程導(dǎo)致JVM意外終止,其他的線程也無法執(zhí)行。