線程:程序中單獨順序的控制流,線程本身依靠程序進行運行洁段,線程是程序中的順序控制流,只能使用分配給程序的資源和環(huán)境质欲。
進程:執(zhí)行中的程序树埠,一個進程至少要包含一個線程。
單線程:程序中只存在一個線程嘶伟,實際上主方法就是一個主線程怎憋。
多線程:多線程是在一個程序中運行多個任務,多線程目的是更好的使用CPU資源九昧。
二绊袋、線程的實現
線程的實現2種:
繼承Thread類
實現Runnable接口
Thread類:
Thread類是在java.lang包中定義的,繼承Thread類必須重寫run()方法铸鹰。
定義格式:
class className extends Thread{
run(){
//此處重寫run方法
};
}
在實例中癌别,我們測試了run()方法和start()方法,運行情況說明線程的啟動一定不是通過run()方法的掉奄,沒有并行機制规个,A執(zhí)行完再執(zhí)行B。start()方法執(zhí)行過程中是并行的姓建,哪個搶占資源運行哪個。
Runnable接口:
public class MyRunnable implements Runnable{
run(){
//重寫run方法
};
}
三缤苫、線程的狀態(tài)
創(chuàng)建狀態(tài):準備好了一個多線程的對象
就緒狀態(tài):調用了start()方法速兔,等待CPU進行調度
運行狀態(tài):執(zhí)行run()方法
阻塞狀態(tài):暫時停止執(zhí)行,可能將資源交給其他線程使用
終止狀態(tài)(死亡狀態(tài)):線程銷毀
四活玲、線程常用方法
Thread類中:
1.取得線程名稱 getName()
2.取得當前線程對象 currentThread()
3.判斷線程是否啟動 isAlive()
4.線程的強行運行 join() 需要使用try catch來捕獲InterruptedException異常
5.線程的休眠 sleep() 異常捕獲同上 示例中在run方法中實現
6.線程的禮讓 yield() 示例中也在run方法中定義
五涣狗、線程的優(yōu)先級
1.優(yōu)先級順序設置
1 - MIN_PRIORITY
10 - MAX_PRIORITY
5 - NORM_PRIORITY
默認狀態(tài)下值為5
Thread.setPriority()設置優(yōu)先級,設置為MAX_PRIORITY的線程并不一定可以最先運行舒憾,是一種可能狀態(tài)镀钓,有優(yōu)勢。
六镀迂、線程同步
1.同步代碼塊
在代碼塊上加上“synchronized”關鍵字丁溅,則此代碼塊就成為同步代碼塊。資源共享的時候使用同步探遵。
2.同步代碼塊的格式:
synchronized(同步對象) {
需要同步的代碼塊窟赏;
}
3.同步方法
除了代碼塊可以同步,方法也是可以同步的
4.方法同步格式:
synchronized void 方法名稱() {}
5.死鎖
七箱季、線程的生命周期