選擇排序和快速排序
程序和執行緒
-
程序作為資源分配的基本單位
-
執行緒作為資源排程的基本單位,是程式的執行單元,執行路徑(單執行緒:一條執行路徑,多執行緒:多條執行路徑)。是程式使用CPU的最基本單位
執行緒有3個基本狀態:
-
執行、就緒、阻塞
執行緒有5種基本操作:
-
派生、阻塞、啟用、 排程、 結束
並行:
-
並行性是指同一時刻內發生兩個或多個事件。
-
並行是在不同實體上的多個事件
併發:
-
併發性是指同一時間間隔內發生兩個或多個事件。
-
併發是在同一實體上的多個事件
由此可見:並行是針對程序的,併發是針對執行緒的
建立多執行緒
-
繼承Thread,重寫run方法
-
實現Runnable介面,重寫run方法
run()和start()方法區別:
-
run()
:僅僅是封裝被執行緒執行的程式碼,直接呼叫是普通方法 -
start()
:首先啟動了執行緒,然後再由jvm去呼叫該執行緒的run()方法。
jvm虛擬機器的啟動是單執行緒的還是多執行緒的?
-
是多執行緒的。不僅僅是啟動main執行緒,還至少會啟動垃圾回收執行緒的。
既然有兩種方式實現多執行緒,我們使用哪一種???
一般我們使用實現Runnable介面
-
可以避免java中的單繼承的限制
-
應該將併發執行任務和執行機制解耦,因此我們選擇實現Runnable介面這種方式
守護執行緒
守護執行緒是為其他執行緒服務的
-
垃圾回收執行緒就是守護執行緒~
守護執行緒有一個特點:
-
當別的使用者執行緒執行完了,虛擬機器就會退出,守護執行緒也就會被停止掉了。
-
也就是說:守護執行緒作為一個服務執行緒,沒有服務物件就沒有必要繼續執行了
使用執行緒的時候要注意的地方
-
線上程啟動前設定為守護執行緒,方法是
setDaemon(boolean on)
-
使用守護執行緒不要訪問共享資源(資料庫、檔案等),因為它可能會在任何時候就掛掉了。
-
守護執行緒中產生的新執行緒也是守護執行緒
-
守護執行緒可以自己退出,非守護執行緒只能手動退出,所以垃圾回收是守護執行緒,因為需要回收完之後自己退出,然後退出JVM