程序啟動(dòng)后變?yōu)檫M(jìn)程,進(jìn)程由單或多個(gè)線程組成少梁。
多線程:并行洛口,共享資源,實(shí)現(xiàn)多任務(wù)凯沪。
五個(gè)狀態(tài):新建绍弟,就緒,運(yùn)行著洼,阻塞,死亡
JVM的線程調(diào)度模式采用了搶占式模式而叼,即根據(jù)線程的優(yōu)先級(jí)來(lái)獲取CPU的使用權(quán)身笤。
主線程:JVM調(diào)用程序main()所產(chǎn)生的線程。
當(dāng)前線程:一般指通過(guò)Thread.currentThread()來(lái)獲取的進(jìn)程葵陵。
后臺(tái)線程:指為其他線程提供服務(wù)的線程液荸,也稱為守護(hù)線程。JVM的垃圾回收線程就是一個(gè)后臺(tái)線程脱篙。
前臺(tái)線程:是指接受后臺(tái)線程服務(wù)的線程娇钱,其實(shí)前臺(tái)后臺(tái)線程是聯(lián)系在一起,就像傀儡和幕后操縱者一樣的關(guān)系绊困∥穆В傀儡是前臺(tái)線程、幕后操縱者是后臺(tái)線程秤朗。由前臺(tái)線程創(chuàng)建的線程默認(rèn)也是前臺(tái)線程煤蹭。
創(chuàng)建多線程的方法:Thread類實(shí)際上也是實(shí)現(xiàn)了Runnable接口的類
a.實(shí)現(xiàn)Runnable接口,實(shí)現(xiàn)run方法<線程體>取视,調(diào)用方式:new Thread(new MyRunnable()).start();
b.繼承Thread類硝皂,重寫(xiě)run方法<線程體>,調(diào)用方式:new MyThread().start();
常見(jiàn)方法:
start():新建的線程進(jìn)入Runnable狀態(tài)
run():線程進(jìn)入Running?狀態(tài)
isAlive():是否在活動(dòng)狀態(tài)作谭,如果線程已經(jīng)啟動(dòng)且尚未終止稽物,則為活動(dòng)狀態(tài)。如果是活動(dòng)狀態(tài)折欠,返回 true贝或;否則 false
wait():JVM會(huì)把該線程放入等待池中吼过,線程進(jìn)入等待狀態(tài),等待被notify傀缩,這是一個(gè)對(duì)象方法那先,而不是線程方法
notify() / notifyAll():?jiǎn)拘哑渌木€程,這是一個(gè)對(duì)象方法赡艰,而不是線程方法
yield():線程放棄執(zhí)行售淡,使其他優(yōu)先級(jí)不低于此線程的線程有機(jī)會(huì)運(yùn)行,它是一個(gè)靜態(tài)方法
getPriority() / setPriority():獲得/設(shè)置線程優(yōu)先級(jí)(1->10),默認(rèn)5
sleep():JVM會(huì)把該線程置為阻塞狀態(tài)慷垮,線程睡眠指定的一段時(shí)間
join():JVM會(huì)把該線程置為阻塞狀態(tài)揖闸,調(diào)用這個(gè)方法的主線程,會(huì)等待加入的子線程執(zhí)行完成
setDaemon(thread):設(shè)置后臺(tái)線程(守護(hù)線程)
同步機(jī)制:控制資源的一致性,加鎖
synchronized: 同步方法和對(duì)象
volatile:同步變量<除final常量外其余均可修飾>