線程的介紹
? 操作系統(tǒng)中有一個(gè)Java語(yǔ)言編寫的程序,想要運(yùn)行這個(gè)程序就需要啟動(dòng)Java虛擬機(jī)叉瘩。
? 當(dāng)啟動(dòng)一個(gè)Java虛擬機(jī)(JVM)時(shí)舀寓,從操作系統(tǒng)開始就會(huì)創(chuàng)建一個(gè)新的進(jìn)程(JVM進(jìn)程),JVM進(jìn)程中將會(huì)派生或者創(chuàng)建很多線程。
? 當(dāng)啟動(dòng)多個(gè)Java虛擬機(jī)(JVM)時(shí),操作系統(tǒng)會(huì)對(duì)應(yīng)創(chuàng)建多個(gè)新的進(jìn)程(JVM進(jìn)程)。
? 針對(duì)線程來(lái)說(shuō)锌云,在一個(gè)JVM進(jìn)程中荠医,多個(gè)線程會(huì)出現(xiàn)并發(fā)的情況吁脱,在多個(gè)JVM進(jìn)程中桑涎,分屬不同JVM進(jìn)程的多個(gè)線程之間會(huì)出現(xiàn)并行的情況。
其中涉及到的概念有:程序兼贡,進(jìn)程攻冷,線程,并發(fā)遍希,并行等曼。兩兩對(duì)比,對(duì)照著更好理解凿蒜。
程序與進(jìn)程
進(jìn)程是程序的一次運(yùn)行活動(dòng)禁谦,屬于一種動(dòng)態(tài)的概念。 程序是一組有序的靜態(tài)指令废封,是一種靜態(tài)的概念州泊。
兩者關(guān)系:進(jìn)程是執(zhí)行程序的動(dòng)態(tài)過(guò)程,程序是進(jìn)程運(yùn)行的靜態(tài)文本漂洋。
進(jìn)程與線程
線程是程序執(zhí)行的一個(gè)路徑遥皂,每一個(gè)線程都有自己的局部變量表、程序計(jì)數(shù)器(指向正在執(zhí)行的指令指針)以及各自的生命周期刽漂。
兩者關(guān)系:一個(gè)進(jìn)程最少派生或者創(chuàng)建一個(gè)線程演训,并且可以同時(shí)并發(fā)運(yùn)行多個(gè)線程。
單線程與多線程
只有一個(gè)主線程的程序贝咙,稱作單線程程序样悟。主線程負(fù)責(zé)執(zhí)行程序的所有代碼。這些代碼只能順序執(zhí)行庭猩,無(wú)法并發(fā)執(zhí)行乌奇,容易出現(xiàn)代碼阻塞(程序沒(méi)有反應(yīng))。
擁有多個(gè)線程的程序眯娱,稱作多線程程序礁苗。可以根據(jù)需要開辟若干子線程。子線程和主線程都是獨(dú)立的運(yùn)行單元徙缴,各自的執(zhí)行互不影響试伙,因此能夠并發(fā)執(zhí)行,能有效地避免代碼阻塞于样,并且提高程序的運(yùn)行性能疏叨。
多線程中多個(gè)線程互不影響,以空間換時(shí)間穿剖,減少程序的響應(yīng)時(shí)間蚤蔓。
多線程與并發(fā)
并發(fā)與多線程之間的關(guān)系就是目的與手段之間的關(guān)系。多線程是并發(fā)解決方案的一種糊余,將原本可能是串行的計(jì)算"改為"并發(fā)的一種手段秀又、途徑或者模型单寂。
通過(guò)多線程操作達(dá)到邏輯上的同時(shí)發(fā)生。
并發(fā)與并行
并發(fā)是指兩個(gè)或多個(gè)事件在同一時(shí)間間隔內(nèi)發(fā)生吐辙,而并行是指兩個(gè)或多個(gè)事件在同一時(shí)刻發(fā)生宣决。
并發(fā)是指一個(gè)處理器同時(shí)處理多個(gè)任務(wù)。并行是指多個(gè)處理器或者是多核的處理器同時(shí)處理多個(gè)不同的任務(wù)昏苏。并發(fā)是邏輯上的同時(shí)發(fā)生(simultaneous)尊沸,而并行是物理上的同時(shí)發(fā)生。