Java多執行緒機制詳解

2021-07-05 21:56:19 字數 1523 閱讀 4112

1.新生狀態(建立狀態)。在生成執行緒物件,但是沒有呼叫物件的start()方法時,該執行緒處於建立狀態

2.就緒狀態。當呼叫了執行緒物件的start方法之後,該執行緒就進入了就緒狀態,此時執行緒具有cpu的執行資格,但是沒有cpu的執行權。

3.執行狀態。執行緒排程程式將處於就緒狀態的執行緒設定為當前執行緒,開始執行run函式當中的**,此時執行緒就進入執行狀態,處於執行狀態的執行緒既有cpu的執行資格,又有cpu的執行權。

4.阻塞狀態。執行緒正在執行的時候,被暫停,通常是為了等待某個時間的發生(比如說某項資源就緒)之後再繼續執行。sleep,suspend,wait等方法都可以導致執行緒阻塞。此時執行緒既沒有cpu的執行資格,也沒有cpu的執行權。

5.死亡狀態。如果乙個執行緒的run方法執行結束或者呼叫stop方法後,該執行緒就會死亡。對於已經死亡的執行緒,無法再使用start方法令其進入就緒轉態。

同步的好處和弊端?

好處:解決了執行緒的安全性問題

弊端:降低了效率,因為同步外的執行緒都要判斷同步鎖

思路:將操作共享資料的多條**封裝起來

package com.ghs.sort;

public

class

demo

}class

ticket

implements

runnable}}

}}

同步鎖就相當於乙個標誌位,初始值為1,有執行緒進去了,值就變為0,只有當同步鎖為1的時候,其他執行緒才能進去。

public

class

demo

}class

bankrun

implements

runnable

}class

bank

}

注意:

1. 同步函式的鎖是this

2. 靜態同步函式的鎖是class物件而不是this,因為靜態函式沒有所屬的物件

當乙個執行緒進入乙個物件的synchronized方法後,其他執行緒是否可以進入此物件的其他方法?

1. 其他方法前如果不是synchronized方法,則能進入。

2. 如果這個方法內部呼叫了wait,則能進入其他的synchronized方法。

3. 其他方法如果都加了synchronized,並且內部沒有呼叫wait,則不能進入。

3. 如果其他方法是static,它的同步鎖是當前類的位元組碼,與非靜態方法不能同步,所以能進入。

JAVA多執行緒機制

1,使用執行緒子類建立執行緒 繼承主題,重寫執行方法。2,使用執行緒類直接建立執行緒物件 用宣告執行緒 生成目標物件,建立目標物件.b b new b 建立執行緒,放入目標物件a new thread b 實現了runnable介面 重寫執行方法 1,啟動 啟動執行緒,只有處於新建狀態下的執行緒才能...

JAVA多執行緒死鎖詳解

需要避免的與多工處理有關的特殊錯誤型別是死鎖 deadlock 死鎖發生在當兩個執行緒對一對同步物件有迴圈依賴關係時。例如,假定乙個執行緒進入了物件x的管程而另乙個執行緒進入了物件y的管程。如果x的執行緒試圖呼叫y的同步方法,它將像預料的一樣被鎖定。而y的執行緒同樣希望呼叫x的一些同步方法,執行緒永...

Java多執行緒 volatile詳解

1 可見性 2 禁止指令重排序 注 volatile的非原子性,在i 或i i 1 會出現不安全。1 lock字首指令會引起處理器快取寫到記憶體,執行緒的本地記憶體失效,別的執行緒只能從主存中讀取資料。而本地記憶體的值會立馬重新整理到主存中去。lock又分為鎖匯流排還是鎖快取 2 乙個處理器的快取回...