1. 程式人生 > >Java基礎之執行緒

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 public
class 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都可以讓多個相同程式程式碼去共享同一個資源

  • 增加程式的健壯性,實現解耦操作,程式碼可以被多個執行緒共享,程式碼與執行緒獨立