多線程

程序

  • 一種靜態的的概念,通常爲可執行文件,當文件執行時,就會產生進程

進程

進程的產生如上所述,每一個進程由3部分組成:java

cpu、data、code安全

通常一個程序會佔用一個或多個進程,即使用同一份程序產生好幾個進程,它們之間仍是擁有本身的這3樣東西,比較浪費內存,cpu的負擔較重。多線程

線程

一個進程每每會產生多個線程,以達到提升效率的目的,若是一個進程,只能作到單任務處理,就比如一個低效的員工,既耗着不走,又作不到高效率工做線程

問題

那麼說了這麼多"多線程"的好處,多線程是否也有壞處呢code

1. 面臨着多線程安全問題(我的理解爲訪問衝突)

當多個線程訪問同一個方法時,若其中須要共享變量(或者說須要去從方法中取出一個相同的變量對其進行操做),那麼問題就來了對象

好比A線程在訪問C方法時取出了變量,還未跳出方法,這時B線程插足了進來,取到的變量多是A操做前也多是A操做後的,可能就達不到咱們預期想要的結果了blog

2.死鎖

當一個方法中,須要同時得到"兩個或兩個以上對象的鎖"時,就可能產生死鎖問題,兩個線程陷入了互相等待,沒法繼續進行的死鎖狀態接口

解決

synchronized

  • 通常是加在方法上,來控制線程同步
  1. 對於實例方法,鎖的是實例對象
  2. 對於靜態方法,鎖的是類對象
**注意**

 1. 在定義**接口**方法時不能使用synchronized關鍵字。
 2. 構造方法不能使用synchronized關鍵字,但可使用synchronized代碼塊來進行同步。

咱們能夠先來看一下線程狀態圖
image進程


能夠看到wait方法和notify方法必須存在於synchronized塊中內存

未完待更......

相關文章
相關標籤/搜索