個人對多執行緒的總結

2021-06-26 22:09:20 字數 1908 閱讀 1748

程序和執行緒:

1)程序是靜態的,其實就是指開啟的乙個程式;而執行緒是動態的,是真正執行的單元,執行的過程。其實我們平時看到的程序,是執行緒在執行著,因為執行緒是作為程序的乙個單元存在的。

2)同樣作為基本的執行單元,執行緒是劃分得比程序更小的執行單位。

3)每個程序都有一段專用的記憶體區域。與此相反,執行緒卻共享記憶體單元(包括**和資料),通過共享的記憶體單元來實現資料交換、實時通訊與必要的同步操作。

1、建立執行緒的方式:

建立方式一:繼承thread

1:定義乙個類繼承thread

2:覆蓋thread中的run方法(將執行緒執行的**放入run方法中)。

3:直接建立thread的子類物件

4:呼叫start方法(內部呼叫了執行緒的任務(run方法))

;作用:啟動執行緒,呼叫run

方法方式二:實現runnable

1:定義類實現runnable介面

2:覆蓋runnable介面中的run方法,將執行緒的任務**封裝到run中

3:通過thread類建立執行緒物件

4、並將runnable介面的子類物件作為thread類的構造函式引數進行傳遞

作為引數傳遞的原因是

讓執行緒物件明確要執行的run方法所屬的物件。

區別:繼承方式:執行緒**放在thread

子類的run

方法中實現方式:執行緒存放在介面的子類run

方法中;避免了單繼承的侷限性,建議使用。

2、執行緒狀態:

新建:start()

臨時狀態:具備cpu

的執行資格,但是無執行權

執行狀態:具備cpu

的執行權,可執行

凍結狀態:通過sleep

或者wait

使執行緒不具備執行資格,需要

notify

喚醒,並處於臨時狀態。

消亡狀態:run

方法結束或者中斷了執行緒,使得執行緒死亡。

3、多執行緒安全問題:

多個執行緒共享同一資料,當某一線程執行多條語句時,其他執行緒也執行進來,導致資料在某一語句上被多次修改,執行到下一語句時,導致錯誤資料的產生。

因素:多個執行緒操作共享資料;多條語句操作同一資料

解決:原理:某一時間只讓某一線程執行完操作共享資料的所有語句。

辦法:使用鎖機制:synchronized

或lock

物件4、執行緒的同步:

當兩個或兩個以上的執行緒需要共享資源,他們需要某種方法來確定資源在某一刻僅被乙個執行緒占用,達到此目的的過程叫做同步(synchronization)。

同步**塊:synchronized(

物件){}

,將需要同步的**放在大括號中,括號中的物件即為鎖。

同步函式:放於函式上,修飾符之後,返回型別之前。 5、

wait

和sleep

的區別:(執行權和鎖區分)

wait:可指定等待的時間,不指定須由

notify

或notifyall

喚醒。執行緒會釋放執行權,且釋放鎖。

sleep:必須制定睡眠的時間,時間到了自動處於臨時(阻塞)狀態。

即使睡眠了,仍持有鎖,不會釋放執行權。 a

ndroid下

的程序與執行緒:

1、程序的生命週期:

1)、程序的建立及**:

程序是被系統建立的,當記憶體不足的時候,又會被系統**

2)、程序的級別:

foreground process

前台程序

visible process

可視程序

service process

服務程序:可以提高端別的

background process

後台程序

empty process

空程序(無元件啟動,做程序快取使用,恢復速度快)

關於對多執行緒的認識總結

學習執行緒後覺得不是那麼好理解,特別是對多執行緒的理解。賣票程式 運用執行緒的知識建立乙個實現火車站賣火車票的類,注意在該類中不能出現多次賣同一張票,或者某一張票沒賣的情況。現在我們來理解這個題目,假設有100張票,賣一張少一張,大致的可以這樣理解 if 票數大於零 第一行 單執行緒我們就不說了,不...

面試後對多執行緒基礎的總結

1.什麼是多執行緒 多執行緒就是多個執行緒同時執行或交替執行。單核cpu的話是順序執行,也就是交替執行。多核cpu的話,因為每個cpu有自己的運算器,所以在多個cpu中可以同時執行 1.實現多執行緒的方式 1 繼承thread類 繼承這個方法然後呼叫start方法去開啟執行緒進入等待執行狀態 2 實...

個人多執行緒程式設計經驗總結

1.各執行緒的資料要分離開來,避免使用全域性變數。2.如果各執行緒一定要使用全域性變數,哪麼該全域性變數一定要讀寫保護 臨界區,互斥等技術 4.確定你知道你的執行緒狀態,不要徑自結束程式而不等待它們的結束 5.讓主線程處理使用者介面 ui 6.千萬不要在乙個臨界區中呼叫sleep 或wait.api...