Java基礎之執行緒
程序與執行緒
-
程序:程序是指記憶體中執行得一個程式,每個程序都有一個獨立的記憶體空間,一個應用程式可以同時執行多個程序;程序是程式執行的一次過程,是系統執行程式的基本單位。
-
執行緒:程序內部以個單獨的獨立執行單元,一個程序可以包含多個執行緒。
-
程序與執行緒的區別:
-
程序:有獨立的儲存空間,程序中的資料存放空間(棧空間和堆空間)是獨立的,至少有一個執行緒
-
執行緒:堆空間是共享的,棧空間是獨立的,執行緒消耗的資源比程序小得多
-
-
執行緒掉度
-
計算機CPU在任意時刻只能執行一條指令,每一個程序只有獲得CPU的使用權才能去執行指令。多程序併發執行,就是各個程序輪流搶奪CPU的使用權來完成指令。在可執行池中,會有多個執行緒處於就緒狀態來等待搶奪CPU的使用權,JVM就負責了執行緒的排程。
-
JVM採用的是搶佔式排程,沒有使用分時排程,因為可能會造成多執行緒執行結果的隨機性。
-
Java建立執行緒方法----繼承Thread類
-
java中建立執行緒類使用的
java.lang.Thread
來建立執行緒,所有的執行緒都是Thread類或者其子類。 -
通過繼承Thread類來建立並啟動執行緒的步驟如下:
-
1.定義Thread類的子類,並重寫run()方法,在run()中寫好要執行的程式。
-
2.建立Thread子類的例項物件,也即是建立了執行緒物件
-
呼叫start()方法開啟執行緒
程式碼演示:
-
1 //測試類 2 public class Test1 {3 public static void main(String[] args) { 4 MyThread001 thread001 = new MyThread001("我的執行緒"); 5 thread001.start(); 6 //主方法中迴圈執行列印語句 7 for (int i = 1; i <=10 ; i++) { 8 System.out.println("main執行緒第"+i+"次執行"); 9 } 10 } 11 }
1 //實現類 2 publicclass MyThread001 extends Thread{ 3 public MyThread001(String name) { 4 super(name); 5 } 6 7 @Override 8 public void run() { 9 for (int i = 1; i <=5 ; i++) { 10 System.out.println(getName()+i+"正在執行"); 11 } 12 } 13 } 14
Thread類
-
Thread類常用構造方法
-
public Thread():
分配一個新的執行緒物件。 -
public Thread(String name)
:分配一個指定名字的新的執行緒物件。 -
public Thread(Runnable target)
:分配一個帶有指定目標新的執行緒物件 -
public Thread(Runnable target,String name)
:分配一個帶有指定目標新的執行緒物件並指定名字
-
-
Thread類常用方法
-
public String getName()
:獲取當前執行緒名稱。 -
public void start()
:導致此執行緒開始執行; Java虛擬機器呼叫此執行緒的run方法。 -
public void run()
:此執行緒要執行的任務在此處定義程式碼。 -
public static void sleep(long millis)
:使當前正在執行的執行緒以指定的毫秒數暫停(暫時停止執行)。 -
public static Thread currentThread()
:返回對當前正在執行的執行緒物件的引用
-
Java建立執行緒方法-----實現Runnable介面
-
通過實現
Runnable
介面來建立執行緒-
1.定義Runnable介面實現類,重寫run()方法。
-
2.建立實現類的示例,並將這個例項物件傳給Thread。
-
3.呼叫Start()方法,開啟執行緒
-
1 //runnable子類 2 public class MyRunnable implements Runnable{ 3 @Override 4 public void run() { 5 for (int i = 1; i <10 ; i++) { 6 System.out.println("第"+i+"遍執行Runnable介面的例項物件列印"); 7 } 8 } 9 }
1 //測試類 2 public class Test2 { 3 public static void main(String[] args) { 4 //例項化runnable介面物件 5 MyRunnable mr = new MyRunnable(); 6 //將runnable介面例項物件作為目標傳入Thread中 7 Thread thread = new Thread(mr,"runnable例項"); 8 //啟動執行緒 9 thread.start(); 10 for (int i = 1; i <=5 ; i++) { 11 System.out.println("main執行緒第"+i+"次列印"+thread.getName()); 12 } 13 } 14 }
除了這兩種方式去建立一個執行緒,我i們也可以通過執行緒池來建立使用執行緒,這個以後再說
Thread和Runnable的區別
-
如果一個類繼承了Thread類,那麼不適合做資源共享;如果實現了Runnable介面,則很容易實現資源共分享
-
Runnable和Thread都可以讓多個相同程式程式碼去共享同一個資源
-
增加程式的健壯性,實現解耦操作,程式碼可以被多個執行緒共享,程式碼與執行緒獨立