DAY15
1. 回答問題:
1. 什么是行程?什么是程式?有什么區別?
程式:資料與指令的集合,程式是靜態的
行程:給程式加入了時間的概念,不同的時間行程有不同的狀態
行程是動態的,就代表OS中正在運行的程式
獨立性,動態性,并發性
2. 什么是并行?什么是并發?
CPU:電腦的核心處理器,類似于“大腦”
并行:相對來順澩比較充足,多個CPU可以同時處理不同的行程
并發:相對來順澩比較緊缺,多個行程同時搶占公共資源,比如CPU

3. 什么是執行緒?執行緒與行程有什么關系?
執行緒是OS能夠進行運算調度的最小單位
一個行程可以擁有多個執行緒,當然,也可以只擁有一個執行緒,只有一個執行緒的行程被稱作單執行緒程式
注意:每個執行緒也有自己獨立的記憶體空間,當然也有一部分公共的空間用于保存共享的資料
4.執行緒有幾種狀態?它們是怎么轉換的?
- 新建狀態:new–申請PCB,進行資源的分配
- 就緒/可運行狀態:萬事俱備只欠CPU,其實是將創建好的執行緒物件加入到就緒佇列中,等待OS選中,這個選擇我們是控制不了的
- 執行/運行狀態:就緒佇列中的執行緒被OS選中了,正在執行
注意:只有就緒狀態才能切換成執行狀態 - 阻塞狀態:執行緒在執行中遇到了問題:
鎖阻塞、休眠阻塞、等待阻塞…問題解決后再加入到就緒佇列中 - 終止狀態:執行緒成功執行完畢,釋放資源

執行緒的掛起:正在運行中的執行緒,由于CPU分配的時間片用完,所以需要保存當前執行緒運行的各項狀態資訊,直到CPU下次再在就緒佇列中選中這個執行緒,恢復現場,繼續執行這個執行緒
2.多執行緒實作方案總結:
多執行緒實作的方案一:繼承
1.自定義一個類extends Thread
2.重寫run()里面寫業務
3.創建執行緒物件
4.呼叫start()
注意:可以通過呼叫父類Thread的含參構造Thread(String name)
給自定義執行緒物件起名字,呼叫方式:super(name);
構造方法摘要
Thread() 創建一個新的執行緒物件,名字是系統自定義的
Thread(String name) 與上面功能一致,還可以自定義執行緒名
多執行緒實作的方案二:實作
1.自定義一個類implements Runnable
2.實作介面中未實作的run()
3.列印執行緒名稱:Thread.currentThread().getName()
4.創建目標業務物件–介面實作類的物件–包含的是我們的業務
5.創建執行緒物件–Thread t1 = new Thread(target);
目的:為了把實作類與Thread建立關系,原因是想用Thread的start()
6.通過執行緒物件呼叫start(),把執行緒物件加入就緒佇列
構造方法摘要
Thread(Runnable target) 創建一個執行緒物件,引數為Runnable實作類的物件
Thread(Runnable target, String name) 與上面功能一致,還可以自定義執行緒名
雖然方案二寫法較為復雜,但是方案二的優點如下:
- 耦合性不強,沒有繼承,后續仍然可以繼承
- 采用實作介面的方式,后續仍然可以實作其他介面
- 可以給所有執行緒物件統一業務,業務保持一致
- 面向介面編程,代碼更高級
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/295227.html
標籤:其他
