更新時(shí)間:2020-01-14 15:50:26 來源:動(dòng)力節(jié)點(diǎn) 瀏覽2781次
線程與進(jìn)程的區(qū)別
在計(jì)算機(jī)發(fā)展初期,每臺(tái)計(jì)算機(jī)是串行地執(zhí)行任務(wù)的,如果碰上需要IO的地方,還需要等待長時(shí)間的用戶IO,后來經(jīng)過一段時(shí)間有了批處理計(jì)算機(jī),其可以批量串行地處理用戶指令,但本質(zhì)還是串行,還是不能并發(fā)執(zhí)行。如何解決并發(fā)執(zhí)行的問題呢?于是引入了進(jìn)程的概念,每個(gè)進(jìn)程獨(dú)占一份內(nèi)存空間,進(jìn)程是內(nèi)存分配的最小單位,相互間運(yùn)行互不干擾且可以相互切換,現(xiàn)在我們所看到的多個(gè)進(jìn)程“同時(shí)"在運(yùn)行,實(shí)際上是進(jìn)程高速切換的效果。
那么有了線程之后,我們的計(jì)算機(jī)系統(tǒng)看似已經(jīng)很完美了,為什么還要進(jìn)入線程呢?如果一個(gè)進(jìn)程有多個(gè)子任務(wù),往往一個(gè)進(jìn)程需要逐個(gè)去執(zhí)行這些子任務(wù),但往往這些子任務(wù)是不相互依賴的,可以并發(fā)執(zhí)行,所以需要CPU進(jìn)行更細(xì)粒度的切換。所以就引入了線程的概念,線程隸屬于某一個(gè)進(jìn)程,它共享進(jìn)程的內(nèi)存資源,相互間切換更快速。
進(jìn)程與線程的區(qū)別:
1.進(jìn)程是資源分配的最小單位,線程是CPU調(diào)度的最小單位。所有與進(jìn)程相關(guān)的資源,均被記錄在PCB中。
2.線程隸屬于某一個(gè)進(jìn)程,共享所屬進(jìn)程的資源。線程只由堆棧寄存器、程序計(jì)數(shù)器和TCB構(gòu)成。
3.進(jìn)程可以看作獨(dú)立的應(yīng)用,線程不能看作獨(dú)立的應(yīng)用。
4.進(jìn)程有獨(dú)立的地址空間,相互不影響,而線程只是進(jìn)程的不同執(zhí)行路徑,如果線程掛了,進(jìn)程也就掛了。所以多進(jìn)程的程序比多線程程序健壯,但是切換消耗資源多。
Java中進(jìn)程與線程的關(guān)系:
1.運(yùn)行一個(gè)程序會(huì)產(chǎn)生一個(gè)進(jìn)程,進(jìn)程至少包含一個(gè)線程。
2.每個(gè)進(jìn)程對(duì)應(yīng)一個(gè)JVM實(shí)例,多個(gè)線程共享JVM中的堆。
3.Java采用單線程編程模型,程序會(huì)自動(dòng)創(chuàng)建主線程 。
4.主線程可以創(chuàng)建子線程,原則上要后于子線程完成執(zhí)行。
線程的start方法和run方法的區(qū)別
區(qū)別
Java中創(chuàng)建線程的方式有兩種,不管使用繼承Thread的方式還是實(shí)現(xiàn)Runnable接口的方式,都需要重寫run方法。調(diào)用start方法會(huì)創(chuàng)建一個(gè)新的線程并啟動(dòng),run方法只是啟動(dòng)線程后的回調(diào)函數(shù),如果調(diào)用run方法,那么執(zhí)行run方法的線程不會(huì)是新創(chuàng)建的線程,而如果使用start方法,那么執(zhí)行run方法的線程就是我們剛剛啟動(dòng)的那個(gè)線程。
以上就是動(dòng)力節(jié)點(diǎn)Java培訓(xùn)機(jī)構(gòu)小編介紹的“新手適合學(xué)習(xí)的Java多線程并發(fā)基礎(chǔ)”的內(nèi)容,希望對(duì)大家有幫助,如有疑問,請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。
相關(guān)內(nèi)容
java多線程的狀態(tài)轉(zhuǎn)換以及基本操作
相關(guān)閱讀
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)