程序
- 一種靜態(tài)的的概念滴劲,一般為可執(zhí)行文件,當(dāng)文件執(zhí)行時(shí)班挖,就會(huì)產(chǎn)生進(jìn)程
進(jìn)程
進(jìn)程的產(chǎn)生如上所述,每個(gè)進(jìn)程由3部分組成:
cpu给梅、data双揪、code
一般一個(gè)程序會(huì)占用一個(gè)或多個(gè)進(jìn)程,即便用同一份程序產(chǎn)生好幾個(gè)進(jìn)程渔期,它們之間還是擁有自己的這3樣?xùn)|西,比較浪費(fèi)內(nèi)存拘哨,cpu的負(fù)擔(dān)較重迅办。
線程
一個(gè)進(jìn)程往往會(huì)產(chǎn)生多個(gè)線程,以達(dá)到提高效率的目的站欺,如果一個(gè)進(jìn)程,只能做到單任務(wù)處理磷账,就好比一個(gè)低效的員工贾虽,既耗著不走,又做不到高效率工作
問題
那么說了這么多"多線程"的好處蓬豁,多線程是否也有壞處呢?
1. 面臨著多線程安全問題(個(gè)人理解為訪問沖突)
當(dāng)多個(gè)線程訪問同一個(gè)方法時(shí)取募,若其中需要共享變量(或者說需要去從方法中取出一個(gè)相同的變量對其進(jìn)行操作)蟆技,那么問題就來了
比如A線程在訪問C方法時(shí)取出了變量斗忌,還未跳出方法,這時(shí)B線程插足了進(jìn)來旺聚,取到的變量可能是A操作前也可能是A操作后的,可能就達(dá)不到我們預(yù)期想要的結(jié)果了
死鎖
當(dāng)一個(gè)方法中唧躲,需要同時(shí)獲得"兩個(gè)或兩個(gè)以上對象的鎖"時(shí)伸眶,就可能產(chǎn)生死鎖問題刽宪,兩個(gè)線程陷入了互相等待,無法繼續(xù)進(jìn)行的死鎖狀態(tài)
解決
synchronized
- 一般是加在方法上圣拄,來控制線程同步
- 對于實(shí)例方法,鎖的是實(shí)例對象
- 對于靜態(tài)方法庇谆,鎖的是類對象
我們可以先來看一下線程狀態(tài)圖
image
可以看到wait方法和notify方法必須存在于synchronized塊中
未完待更......