進程的產生如上所述,每一個進程由3部分組成:java
cpu、data、code安全
通常一個程序會佔用一個或多個進程,即使用同一份程序產生好幾個進程,它們之間仍是擁有本身的這3樣東西,比較浪費內存,cpu的負擔較重。多線程
一個進程每每會產生多個線程,以達到提升效率的目的,若是一個進程,只能作到單任務處理,就比如一個低效的員工,既耗着不走,又作不到高效率工做線程
那麼說了這麼多"多線程"的好處,多線程是否也有壞處呢?code
當多個線程訪問同一個方法時,若其中須要共享變量(或者說須要去從方法中取出一個相同的變量對其進行操做),那麼問題就來了對象
好比A線程在訪問C方法時取出了變量,還未跳出方法,這時B線程插足了進來,取到的變量多是A操做前也多是A操做後的,可能就達不到咱們預期想要的結果了blog
當一個方法中,須要同時得到"兩個或兩個以上對象的鎖"時,就可能產生死鎖問題,兩個線程陷入了互相等待,沒法繼續進行的死鎖狀態接口
**注意** 1. 在定義**接口**方法時不能使用synchronized關鍵字。 2. 構造方法不能使用synchronized關鍵字,但可使用synchronized代碼塊來進行同步。
咱們能夠先來看一下線程狀態圖
進程
能夠看到wait方法和notify方法必須存在於synchronized塊中內存
未完待更......