15 多執行緒

2021-10-23 16:18:06 字數 4648 閱讀 5398

程序:進行中的程式,只有程式在執行過程中,才能稱之為程序。計算機cpu分配資源的最小單位

執行緒:每個程序至少包含乙個執行緒。程序和執行緒的關係就像車和車輪,執行緒不是越多越好,要結合實際的硬體條件。(執行緒是cpu排程和分派的基本單位)

執行緒執行的基本概念:單核心cpu的情況,執行緒是輪流交替執行,而且是隨機的,每個執行緒最多執行的時間是20ms,間隔短,所以我們感知不到這個過程,巨集觀上看就是"同時"執行。

並行和併發:

併發:同時發生,比如你點了兩份菜,從飯店老闆的角度(巨集觀)看,你是同時吃完的,但是嚴格來說,是輪流交替執行的(微觀角度).

並行:同時執行,比如你和同桌一人點了乙份菜,這才是真正意義的同時執行。

1.繼承thread類,重寫run方法

2.實現runnable介面,實現run方法

3.實現callable介面,實現cal方法

4.執行緒池

面試題:

呼叫start方法和run方法的區別?

呼叫start方法會開啟乙個新的執行緒

不能呼叫run方法,因為不會開啟新的執行緒

/**

* 建立執行緒方式1 繼承thread類 重寫run方法

* 面試題:呼叫start方法和run方法的區別

* 啟動執行緒呼叫start方法 會開啟乙個新的執行緒

* 不能呼叫run方法 因為不會開啟新的執行緒

* @author asus

*/public class test2 extends thread

​ public static void main(string args)

}

/**

* 建立執行緒方式2 實現runnable介面 重寫run方法

* @author asus

*/public class test3 implements runnable

public static void main(string args)

}

建立--》就緒--》執行--》阻塞--》死亡

/**

* 執行緒的狀態

* @author asus

*/public class test4 extends thread

}// 死亡

​ public static void main(string args)

}

getname() 獲取執行緒名稱

setname() 設定執行緒名稱

getpriority() 獲取執行緒優先順序

setpriority() 設定執行緒優先順序

max_priority 最大優先順序10

min_priority 最小優先順序1

norm_priority 預設優先順序5

sleep() 休眠方法

join() 執行緒插隊

yield() 執行緒禮讓(並不能保證一定會禮讓)

interrupt() 改變當前執行緒標識,標識此執行緒可以被中斷,不是立即中斷

isalive() 是否存活狀態

stop() 中斷執行緒

currentthread() 獲取當前執行緒物件

synchronized: 同步

通常用·this

適用場景:

修飾**塊:表示同步**塊

1.同一時刻只能有乙個執行緒訪問此同步**塊synchronized(this)

2.但其他執行緒可以訪問沒有被修飾的**。

3.其他被synchronized(this)修飾的**塊同樣被鎖定

修飾方法:同步方法,同時只能有乙個執行緒訪問此方法

同一時刻只能有乙個執行緒進入synchronized(this)同步**塊

當乙個執行緒訪問乙個synchronized(this)同步**塊時,其他synchronized(this)同步**塊同樣被鎖定

當乙個執行緒訪問乙個synchronized(this)同步**塊時,其他執行緒可以訪問該資源的非synchronized(this)同步**

/**

* 買票

* 多個人搶票  

* 三個人   10張票

* synchronized 同步

* 適用場景:**塊 方法

* @author asus

*/public class buyticket2 implements runnable catch (interruptedexception e)

synchronized (this)

count --; system.out.println(thread.currentthread().getname() + "搶到了第"+(10 - count)+"張票,還剩餘" + count);

}

// 這裡的 其他執行緒也訪問

}

}​ public static void main(string args)

}​

/**

* 買票

* 多個人搶票  

* 三個人   10張票

* synchronized 同步

* 適用場景:

* **塊 表示同時只能有乙個執行緒執行當前**塊

* 方法 表示同時只能有乙個執行緒執行當前方法

* 回顧我們之前所學執行緒安全的類 stringbuffer

* @author asus

*/public class buyticket3 implements runnable catch (interruptedexception e)

if(count == 0)

count --;

system.out.println(thread.currentthread().getname() + "搶到了第"+(10 - count)+"張票,還剩餘" + count);}}

​ public static void main(string args)

}

1.執行緒的狀態

2.建立執行緒的方式 兩種方式的區別

3.呼叫start和呼叫run方法的區別

4.執行緒排程的方法

5.程序和執行緒的區別

6.同步關鍵字的作用,規則

7.書寫同步關鍵字

8.禮讓和插隊有什麼區別

1.執行緒的狀態

建立 就緒 執行 阻塞 死亡

2.建立執行緒的方式 兩種方式的區別

繼承thread類 重寫run方法 書寫簡單 適用於單繼承

實現runnable介面 重寫run方法 可以實現資料共享 多用組合

少用繼承

3.呼叫start和呼叫run方法的區別

start方法開啟新執行緒 run方法不不會開啟新執行緒

4.執行緒排程的方法

sleep 休眠      join 插入

yield 禮讓       stop 中斷

start 開始

5.程序和執行緒的區別

程序是cpu最小的分配資源單位 程序可以有多個執行緒

6.同步關鍵字的作用,規則  

修飾**塊

1.同時只能有乙個執行緒訪問此**塊

2.可以訪問沒有被修飾**

3.其他被synchronized修飾的**塊同樣被鎖定 修飾方法 同步方法,同時只能有乙個執行緒訪問此方法

7.書寫同步關鍵字

synchronized

8.禮讓和插隊有什麼區別

禮讓不一定會禮讓 插隊是一定會插隊

第15章 多執行緒

模擬銀行取錢的問題 1.定義乙個account類 1 該account類封裝了賬戶編號 string 和餘額 double 兩個屬性 2 設定相應屬性的getter和setter方法 3 提供無參和有兩個引數的構造器 4 系統根據賬號判斷與使用者是否匹配,需提供hashcode 和equals 方法...

多執行緒1 5以後新添特性

1.執行緒池 開闢記憶體空間,裡面存放了眾多的執行緒,池中線程執行排程由池管理器來處理,當有執行緒任務時,從池中取乙個,執行完畢,後在歸還池中,這樣可以避免反覆建立執行緒物件所帶來的效能開銷。固定大小的執行緒池吃 executorservice pool executors.newfixedthea...

15 Flutter 多執行緒(二)

詳細 參見demo demo位址 flutter isolatedemo import dart async import dart io import dart isolate import package dio dio.dart import package flutter foundatio...