8.1 執行緒簡介
1 、多任務
-
現實生活中多件事一起作,
-
在程式中是指在一個系統中可以同時進行多個行程,即有多個單獨運行的任務,每一個任務對應一個行程,
-
每一個行程都有一段專用的記憶體區域,即使是多次啟動同一段程式產生不同的行程也是如此,
2、多執行緒
-
Java 給多執行緒編程提供了內置的支持, 一條執行緒指的是行程中一個單一順序的控制流,一個行程中可以并發多個執行緒,每條執行緒并行執行不同的任務,
-
多執行緒是多任務的一種特別的形式,但多執行緒使用了更小的資源開銷,
-
多執行緒能滿足程式員撰寫高效率的程式來達到充分利用 CPU 的目的,
-
主執行緒和子執行緒交替執行
3、程式、行程、執行緒
-
程式
-
程式是指令和資料的有序集合,其本身沒有任何運行的含義,是一個靜態的概念,
-
-
行程
-
一個應用程式(1個行程是一個軟體)
-
是執行程式的一次執行程序,是一個流動的概念,是系統資源分配的單位,
-
一個行程包括由作業系統分配的記憶體空間,包含一個或多個執行緒,一個行程一直運行,直到所有的非守護執行緒都結束運行后才能結束,
-
-
執行緒
-
一個行程中的執行場景/執行單元,
-
執行緒是CPU調度和執行的單位,
-
一個執行緒不能獨立的存在,它必須是行程的一部分,
-
-
注意:
-
一個行程可以有多個執行緒
-
執行緒是獨立的執行路徑,
-
在程式與運行時,即使沒有自己創建執行緒,后臺也會有多個執行緒,如主執行緒,gc執行緒
-
main()稱為主執行緒,為系統的入口,用于執行整個程式;
-
在一個行程中,如果開辟了多個行程,執行緒的運行由調度器安排調度,調度器是與作業系統緊密相關的,先后順序是不能認為的干預的,
-
對于同一份資源操作,會存在資源搶奪的問題,需要加入并發控制,
-
執行緒會帶來額外的開銷,CPU的調度時間、并發控制開銷,
-
每一個執行緒在自己的作業記憶體互動,記憶體控制不當會造成資料不一致,
-
8.2 執行緒創建
-
三種創建方式:
-
Thread class 繼承Thread類
-
Runnable介面 實作Runnable介面
-
Callable介面 實作Callable介面
-
8.2.1 Thread類
-
創建一個新的執行執行緒的方法,將一個宣告為Thread的子類,
-
自定義執行緒類繼承Thread類
-
重寫run()方法,撰寫執行緒執行體
-
創建執行緒物件,呼叫start()方法啟動執行緒,
-
注意:
-
執行緒開啟不一定立即執行,由CPU調度執行
-
啟動執行緒:子類物件.start()
-
不建議使用,為了避免OOP單繼承的局限性
-
-
實體
package Demo032;
?
/**
* @Author: H-YONG-8
* @DATA: 2023/4/20
* JavaSE
* 創建多執行緒 繼承Thread類
*/
public class TestThread1 extends Thread{
@Override
public void run() {
for (int i = 0; i < 20; i++) {
System.out.println("我在看代碼-----"+i);
}
}
?
public static void main(String[] args) {
//main 主執行緒
?
//創建一個執行緒物件
TestThread1 testThread1 = new TestThread1();
?
//呼叫start()方法開啟執行緒
testThread1.start();
for (int i = 0; i < 20; i++) {
System.out.println("我在學習多執行緒---"+i);
}
}
}
?
//多條執行路徑,主執行緒和子執行緒并行交替執行
?
執行結果:
我在學習多執行緒---0
我在看代碼-----0
我在學習多執行緒---1
我在看代碼-----1
我在學習多執行緒---2
我在看代碼-----2
我在看代碼-----3
我在學習多執行緒---3
我在看代碼-----4
我在看代碼-----5
我在學習多執行緒---4
我在學習多執行緒---5
我在看代碼-----6
我在學習多執行緒---6
我在看代碼-----7
我在學習多執行緒---7
我在看代碼-----8
我在學習多執行緒---8
我在看代碼-----9
我在學習多執行緒---9
我在看代碼-----10
我在學習多執行緒---10
我在學習多執行緒---11
我在學習多執行緒---12
我在學習多執行緒---13
我在學習多執行緒---14
我在學習多執行緒---15
我在學習多執行緒---16
我在學習多執行緒---17
我在學習多執行緒---18
我在學習多執行緒---19
我在看代碼-----11
我在看代碼-----12
我在看代碼-----13
我在看代碼-----14
我在看代碼-----
