新聞中心
static局部變量是線程共享嗎?
不,static局部變量不是線程共享的。static局部變量在函數(shù)內(nèi)部聲明,但其生命周期超過函數(shù)的執(zhí)行時間。它在內(nèi)存中只有一份拷貝,并且在程序的整個執(zhí)行過程中都存在。每個線程都有自己的??臻g,所以每個線程都會有自己的static局部變量的拷貝,互不干擾。因此,static局部變量是線程私有的,不會被多個線程共享。

C#多線程同用一個全局變量,如何保持每個線程的變量不會被別的線程把值覆蓋掉?
如果是全局變量,而各個線程又都要能讀寫,而且不能被別的線程覆蓋掉,那只能是加鎖,
lock(全局變量)
{
doSomeThing();
}
但是這樣會影響多線程的并發(fā),如果是私有變量就不存在這個問題了,
得看你具體要求做什么了
PC寄存器有什么特點?
PC寄存器的特點:
它是一塊很小的的內(nèi)存空間,幾乎可以忽略不記。也是運行速度最快的區(qū)域
在jvm規(guī)范中,每個線程都有它自己的程序技術(shù)器。是線程私有的,聲明周期與線程的生命周期保持一致。
在任何時間一個線程都要一個方法在執(zhí)行,也就是所謂的當(dāng)前方法。程序計數(shù)器會存儲當(dāng)前線程正在執(zhí)行的java方法的jvm指令地址。
jvm內(nèi)存是運行內(nèi)存嗎?
JVM運行時的內(nèi)存也叫JVM堆,從GC的角度可以將JVM對分為新生代,老年代和永久代。其中新生代默認(rèn)占1/3的空間,老年代默認(rèn)占2/3的堆存儲空間,永久代占非常少的空間。
新生代又分為Eden區(qū)、SurvirorFrom區(qū)和SurvirorTo區(qū),Eden默認(rèn)占8/10的新生代空間,SurvirorFrom區(qū)和SurvirorTo區(qū)分別默認(rèn)占1/10新生代空間
你好,JVM內(nèi)存是指Java虛擬機(jī)使用的內(nèi)存,它不僅包括運行內(nèi)存,還包括其他內(nèi)存區(qū)域,如堆內(nèi)存、棧內(nèi)存、方法區(qū)內(nèi)存、直接內(nèi)存等。
其中,堆內(nèi)存是JVM中最大的一塊內(nèi)存,主要用于存儲Java對象,而棧內(nèi)存用于存儲線程執(zhí)行時的局部變量和方法調(diào)用棧等。因此,JVM內(nèi)存不僅僅是運行內(nèi)存,還包括其他內(nèi)存區(qū)域。
首先,JVM將內(nèi)存組織為主內(nèi)存和工作內(nèi)存兩個部分。
主內(nèi)存主要包括本地方法區(qū)和堆。每個線程都有一個工作內(nèi)存,工作內(nèi)存中主要包括兩個部分,一個是屬于該線程私有的棧和對主存部分變量拷貝的寄存器(包括程序計數(shù)器PC和cup工作的高速緩存區(qū))。
1.所有的變量都存儲在主內(nèi)存中(虛擬機(jī)內(nèi)存的一部分),對于所有線程都是共享的。
2.每條線程都有自己的工作內(nèi)存,工作內(nèi)存中保存的是主存中某些變量的拷貝,線程對變量的所有操作都必須在工作內(nèi)存中進(jìn)行,而不能直接讀寫主內(nèi)存中的變量。
3.線程之間無法直接訪問對方的工作內(nèi)存中的變量,線程間變量的傳遞均需要通過主內(nèi)存來完成。
到此,以上就是小編對于線程的私有數(shù)據(jù)的問題就介紹到這了,希望這4點解答對大家有用。
當(dāng)前標(biāo)題:static局部變量是線程共享嗎?windows線程私有數(shù)據(jù)
轉(zhuǎn)載注明:http://m.5511xx.com/article/codieis.html


咨詢
建站咨詢
