程式
- 一種靜態的的概念,一般為可執行檔案,當檔案執行時,就會產生行程
行程
行程的產生如上所述,每個行程由3部分組成:
cpu、data、code
一般一個程式會占用一個或多個行程,即便用同一份程式產生好幾個行程,它們之間還是擁有自己的這3樣東西,比較浪費記憶體,cpu的負擔較重,
執行緒
一個行程往往會產生多個執行緒,以達到提高效率的目的,如果一個行程,只能做到單任務處理,就好比一個低效的員工,既耗著不走,又做不到高效率作業
問題
那么說了這么多"多執行緒"的好處,多執行緒是否也有壞處呢?
1. 面臨著多執行緒安全問題(個人理解為訪問沖突)
當多個執行緒訪問同一個方法時,若其中需要共享變數(或者說需要去從方法中取出一個相同的變數對其進行操作),那么問題就來了
比如A執行緒在訪問C方法時取出了變數,還未跳出方法,這時B執行緒插足了進來,取到的變數可能是A操作前也可能是A操作后的,可能就達不到我們預期想要的結果了
2.死鎖
當一個方法中,需要同時獲得"兩個或兩個以上物件的鎖"時,就可能產生死鎖問題,兩個執行緒陷入了互相等待,無法繼續進行的死鎖狀態
解決
synchronized
- 一般是加在方法上,來控制執行緒同步
- 對于實體方法,鎖的是實體物件
- 對于靜態方法,鎖的是類物件
**注意**
1. 在定義**介面**方法時不能使用synchronized關鍵字,
2. 構造方法不能使用synchronized關鍵字,但可以使用synchronized代碼塊來進行同步,
我們可以先來看一下執行緒狀態圖

可以看到wait方法和notify方法必須存在于synchronized塊中
未完待更......
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/270925.html
標籤:面向對象
上一篇:java設計模式-里式替換原則
