鍍金池/ 問(wèn)答/Java  Linux  網(wǎng)絡(luò)安全/ 關(guān)于線程是否有自己的內(nèi)存空間的問(wèn)題

關(guān)于線程是否有自己的內(nèi)存空間的問(wèn)題

從線程和進(jìn)程的角度來(lái)說(shuō),進(jìn)程是資源分配的最小單位,線程是獨(dú)立調(diào)度的最小單位。
同一個(gè)進(jìn)程中的多個(gè)線程之間可以并發(fā)執(zhí)行,他們共享進(jìn)程資源。
線程不擁有資源,線程可以訪問(wèn)隸屬進(jìn)程的資源,進(jìn)程有自己的獨(dú)立空間地址,線程沒有自己的獨(dú)立空間地址,但是線程有自己的堆棧和局部變量。

如何理解線程不擁有獨(dú)立的地址空間但是線程卻可以有私有的棧、程序計(jì)數(shù)器、本地方法區(qū)。

我的一直的理解是,線程的棧、程序計(jì)數(shù)器、本地方法區(qū)也是存放在進(jìn)程的地址空間上,只是這些棧、程序計(jì)數(shù)器、本地方法區(qū)都只能有某個(gè)特定的線程去訪問(wèn)、其他的線程訪問(wèn)不到。

這么理解是對(duì)的嗎?

回答
編輯回答
凹凸曼

你的理解是對(duì)的,稍微補(bǔ)充一點(diǎn),線程的棧,其他線程也是可以訪問(wèn)的,只是常規(guī)上訪問(wèn)不到,如果你使用C/C++語(yǔ)言的話,數(shù)組越界后,很容易就訪問(wèn)到其他線程的棧了,以致有可能導(dǎo)致其他線程的異常。 這一點(diǎn)也從側(cè)面證明一個(gè)進(jìn)程內(nèi)的多個(gè)線程是共享內(nèi)存的。

2017年1月6日 07:14