首先簡單的介紹一下線程:
進程:正在運行中的程序。其實進程就是一個應用程序運行時的內存分配空間。
線程:其實就是進程中的一條執行路徑。進程負責的是應用程序的空間的標示。線程負責的是應用程序的執行順序。
線程的生命周期:
一般來說線程狀態有一下幾種:
①新建:
創建線程對象。
②就緒:
start方法被調用,線程獲得了執行資格,但還沒有執行權。
(隨機性的原理:因為cpu的快速切換造成,哪個線程獲取到了cpu的執行權,哪個線程就執行。)
③運行:
線程獲得了CPU的執行權,此狀態有執行資格也有執行權。
④阻塞:
由於一些操作讓線程處於了該狀態,沒有了執行資格,也沒有了執行權。而另一些操作又可以將線程激活,激活後處於就緒狀態。
⑤死亡:
run方法結束,線程對象變成垃圾,等待GC回收。
再順便介紹一下線程的一些方法:
void run() 繼承Thread或者實現Runnable時必須實現的方法,裡面寫耗費時間的操作。
void start() 開啟線程的方法
static void sleep(long t) 釋放CPU的執行權,不釋放鎖
static void sleep(long millis,int nanos)
final void wait()釋放CPU的執行權,釋放鎖
final void notify()喚醒線程池中的任意一個線程
interrupt():中斷線程。
setPriority(int newPriority):設置線程的優先級。(默認優先級是5)
getPriority():返回線程的優先級。
toString():返回該線程的字符串表示形式,包括線程名稱、優先級和線程組。
Thread.yield():暫停當前正在執行的線程對象,並執行其他線程。 禮讓線程
setDaemon(true):將該線程標記為守護線程或用戶線程。當正在運行的線程都是守護線程時,Java 虛擬機退出。該方法必須在啟動線程前調用。
join: 加入一個線程,當這個線程執行完之後才會執行別的線程。