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

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


咨詢(xún)
建站咨詢(xún)
