Java基礎之線程

進程與線程

  • 進程:進程是指內存中運行得一個程序,每一個進程都有一個獨立的內存空間,一個應用程序能夠同時運行多個進程;進程是程序運行的一次過程,是系統運行程序的基本單位。java

  • 線程:進程內部以個單獨的獨立執行單元,一個進程能夠包含多個線程。多線程

  • 進程與線程的區別:併發

    • 進程:有獨立的存儲空間,進程中的數據存放空間(棧空間和堆空間)是獨立的,至少有一個線程ide

    • 線程:堆空間是共享的,棧空間是獨立的,線程消耗的資源比進程小得多測試

  • 線程掉度spa

    • 計算機CPU在任意時刻只能執行一條指令,每個進程只有得到CPU的使用權才能去執行指令。多進程併發執行,就是各個進程輪流搶奪CPU的使用權來完成指令。在可運行池中,會有多個線程處於就緒狀態來等待搶奪CPU的使用權,JVM就負責了線程的調度。線程

    • JVM採用的是搶佔式調度,沒有使用分時調度,由於可能會形成多線程執行結果的隨機性。code

Java建立線程方法----繼承Thread類

  • java中建立線程類使用的java.lang.Thread來建立線程,全部的線程都是Thread類或者其子類。對象

  • 經過繼承Thread類來建立並啓動線程的步驟以下:blog

    • 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均可以讓多個相同程序代碼去共享同一個資源

  • 增長程序的健壯性,實現解耦操做,代碼能夠被多個線程共享,代碼與線程獨立

相關文章
相關標籤/搜索