在介紹線程之前,我們首先要了解一下進(jìn)程刻获。
進(jìn)程的官方解釋:
進(jìn)程是計(jì)算機(jī)中的程序關(guān)于某數(shù)據(jù)集合上的一次運(yùn)行活動(dòng)蜀涨,是系統(tǒng)進(jìn)行資源分配和調(diào)度的基本單位,是操作系統(tǒng)結(jié)構(gòu)的基礎(chǔ)蝎毡。在當(dāng)代面向線程設(shè)計(jì)的計(jì)算機(jī)結(jié)構(gòu)中厚柳,進(jìn)程是線程的容器。
線程就是輕量級(jí)的進(jìn)程沐兵,是程序執(zhí)行的最小單位别垮。使用多線程而不是多進(jìn)程進(jìn)行并發(fā)程序的設(shè)計(jì)是因?yàn)榫€程間的切換和調(diào)度成本遠(yuǎn)低于進(jìn)程。
線程的生命周期:
NEW表示剛剛創(chuàng)建好的線程扎谎,還沒(méi)有開始執(zhí)行碳想。
等到線程調(diào)用start方法烧董,表示線程開始執(zhí)行,進(jìn)入RUNNABLE狀態(tài)胧奔,表示線程需要的資源都準(zhǔn)備好了正在執(zhí)行逊移。
如果線程遇到synchronized同步塊,并且沒(méi)有獲得請(qǐng)求的鎖龙填,線程將進(jìn)入BLOCKED阻塞狀態(tài)胳泉,直到該線程獲得請(qǐng)求的鎖。
WAITING和TIMED_WAITING都是等待狀態(tài)岩遗,前者是無(wú)時(shí)間限制的等待扇商,后者是有時(shí)間限制的等待。線程調(diào)用object.wait方法喘先,則線程會(huì)進(jìn)入等待狀態(tài)钳吟,直到其他線程調(diào)用object.notify或者object.notifyAll方法廷粒,則會(huì)回到RUNNABLE狀態(tài)窘拯。通過(guò)join方法等待的線程則會(huì)等目標(biāo)線程終止才會(huì)進(jìn)入RUNNABLE狀態(tài)。
當(dāng)線程執(zhí)行完畢坝茎,則會(huì)進(jìn)入TERMINATED狀態(tài)涤姊。