多執行緒-1
JAVA執行緒概念
程序:指的是一個記憶體中執行的應用程式,並且每個程序都有自己一個獨立記憶體空間
執行緒:指的是程序中的一個執行的路徑,並且一個程序可以同時擁有多個執行緒。多個執行緒共享一個程序的記憶體空間,並且相互之間可以相互切換,併發執行。可以說執行緒是程序的進一步的劃分。
一個程序至少有一個執行緒。
併發與並行
併發:指在兩個或兩個以上的程序中,同一時間段內執行
並行:指在兩個或兩個以上的程序中,同一時刻發生(即同時發生)
同步與非同步
同步:同步同步統一步伐,即排隊執行,雖然效率低但資料安全
非同步:非同步非同步就像菜市場大媽同時爭搶特價一樣,不排隊,即同時執行,雖然效率高但資料不安全
JAVA建立與啟動執行緒
方法1:通過將類宣告為Thread的子類實現。此子類覆蓋Thread類的run方法(即重寫run方法)
結果:
方法2:執行緒的另一種方法是宣告一個實現Runnable介面的類。用該類實現run方法(也是要重寫run方法)。在建立Thread時作為引數傳遞,然後.start()
結果
因為JAVA是搶佔式排程,每個執行緒都有優先權,具有較高的優先權先執行。當建立多個執行緒時,
1 public static void main(String[] args) { 2 Boy b = new Boy(); 3 new Thread(b).start();4 new Thread(b).start(); 5 new Thread(b).start(); 6 /* 7 或者 8 Thread t1 = new Thread(b); 9 t1.start(); 10 Thread t2 = new Thread(b); 11 t2.start(); 12 Thread t3 = new Thread(b); 13 t3.start(); 14 */ 15 System.out.println("我是主執行緒:main");16 } 17 static class Boy implements Runnable{ 18 19 @Override 20 public void run() { 21 System.out.println(Thread.currentThread().getName()+"我是子執行緒:boy"); 22 } 23 }
結果
多次執行,執行緒Thread-0,Thread-1,Thread-2打印出的位置都不一樣(即輸出時間都不一樣),因為在這裡Thread優先順序都相同,所以會隨機選擇一個Thread先輸出,所以每次列印結果不一樣。
執行緒的排程
分時排程:所有執行緒輪流使用CPU使用權,平均分配每個執行緒佔用CPU的時間(分時嘛,顧名思義)
搶佔式排程:優先讓優先順序高的執行緒使用CPU,如果執行緒優先順序相同,那麼就會隨機的選擇一個先執行(隨機性),上面的例子就可以看出。
CPU使用搶佔式排程模式在多個執行緒之間進行高速的切換,其實對於CPU的一個核心而言,某個時刻,只能執行一個執行緒,因為它的高速切換讓我們誤以為它能夠同時幹很多事情。而且多執行緒程式並不能提高程式的執行速度,但能夠提高程式執行的效率,讓CPU使用率更高。