進程:進程是指內存中運行得一個程序,每一個進程都有一個獨立的內存空間,一個應用程序能夠同時運行多個進程;進程是程序運行的一次過程,是系統運行程序的基本單位。java
線程:進程內部以個單獨的獨立執行單元,一個進程能夠包含多個線程。多線程
進程與線程的區別:併發
進程:有獨立的存儲空間,進程中的數據存放空間(棧空間和堆空間)是獨立的,至少有一個線程ide
線程:堆空間是共享的,棧空間是獨立的,線程消耗的資源比進程小得多測試
線程掉度spa
計算機CPU在任意時刻只能執行一條指令,每個進程只有得到CPU的使用權才能去執行指令。多進程併發執行,就是各個進程輪流搶奪CPU的使用權來完成指令。在可運行池中,會有多個線程處於就緒狀態來等待搶奪CPU的使用權,JVM就負責了線程的調度。線程
JVM採用的是搶佔式調度,沒有使用分時調度,由於可能會形成多線程執行結果的隨機性。code
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類經常使用構造方法
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()
:返回對當前正在執行的線程對象的引用
經過實現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接口,則很容易實現資源共分享
Runnable和Thread均可以讓多個相同程序代碼去共享同一個資源
增長程序的健壯性,實現解耦操做,代碼能夠被多個線程共享,代碼與線程獨立