併發:兩個或多個事件在同一時間段發生,交替執行多線程
並行:兩個或多個事件在同一時刻發生,同時發生併發
進程:一個內存中運行的應用程序,每一個進程都有一個獨立的內存空間,一個應用程序能夠同時運行多個進程,進程也是程序的一次執行過程,是系統運行程序的基本單位,系統運行一個程序便是一個進程的建立、運行到消亡的過程ide
線程:進程中的一個執行單位,負責當前進程中程序的執行,一個進程至少有一個線程,一個進程中是能夠有多個線程,這個應用程序也能夠稱之爲多線程。線程
線程的調度:一、分時調度:全部線程輪流使用CPU的使用權,平均分配每一個線程佔用的CPU的事件對象
二、搶佔式調度:優先讓優先級高的線程使用CPU,若是線程的優先級相同,那麼會隨機選擇一個,Java爲搶佔式調度接口
主線程:執行主方法(main)的線程進程
建立多線程程序:第一種方式:建立Thread類的子類事件
實現步驟:一、建立一個thread類的子類內存
二、在thread類的子類中重寫thread類中的run方法,設置線程任務get
三、建立thread類的子類對象
四、調用thread類中的start方法,開啓新的線程,執行run方法,併發執行
建立線程的第二種方式:聲明實現runnable接口的類,該類而後實現run方法,而後能夠分配該類的實例,在建立thread時,做爲一個參數來傳遞啓動
實現步驟:一、建立一個runnable接口的實現類
二、在實現類中重寫runnable接口的run方法,設置線程任務
三、建立一個runnable接口的實例對象
四、建立Thread類對象,構造方法中傳遞runnable接口的實現類對象
五、調用Thread類中的start方法,開啓新的線程執行run方法
使用Runnable接口建立多線程程序的好處:一、避免了單線程的侷限性
二、加強了程序的擴展性,下降了程序的耦合性
Thread類的經常使用方法:獲取線程的名稱:一、使用Thread類中的方法 String getName()
二、能夠先獲取當前正在執行的線程,使用線程中的方法getName()獲取線程的名稱
Static Thread currentThread()返回對當前正在執行的線程對象的引用
設置線程名稱:一、使用Thread類中的方法setName(String name);
二、建立一個帶參數的構造方法,參數傳遞線程的名稱, 調用父類的帶參數的方法
暫停線程:public static void sleep(long millis),是當前線程以指定毫秒暫停
public class MyThread extends Thread { @Override public void run(){ setName("子類線程"); System.out.println(getName()); try { sleep(2000); } catch (InterruptedException e){ e.getMessage(); } System.out.println(Thread.currentThread().getName()); } }
public class MyThread2 implements Runnable { @Override public void run(){ System.out.println(Thread.currentThread().getName()); } }
public class Demo { public static void main(String[] args){ MyThread mt = new MyThread(); mt.start(); System.out.println(Thread.currentThread()); MyThread2 mt2 = new MyThread2(); Thread t = new Thread(mt2); t.start(); } }