當前位置:首頁 » 編程語言 » java共享變數

java共享變數

發布時間: 2022-08-27 21:15:01

java堆內存被所有線程所共享,不明白2個線程如何共享2個對象中的同名變數。

首先:堆內存共享是相對於棧內存的。棧是每一個線程都獨有的,線程之間互不一向,每一個線程都有自己的棧內存。但是堆內存不一樣,在一個JVM實例裡面,不管你有多少線程,創建了多少對象,都是放在一塊堆內存的。也就是說一個JVM實例棧內存區域是有多個,每一個線程持有一個,而堆內存只有一個,是線程共享的。
其次:針對你這個代碼,這個情況下每一個線程確實是對應著不同的對象。也就是在同一個堆(也只有一個堆)裡面創建了兩個Demo對象。你老師的意思應該是
Demo demo = new demo();
Thread S1=new Thread(demo);
Thread S2=new Thread(demo);
這樣兩個線程都是操作堆內存共享的對象。

㈡ java多線程共享變數

兩個線程同時獲取變數,
獲取之後.第一個線程++操作,然後進入睡眠.
這時,第二個線程,也獲取到了,做--操作.睡眠.
第一個線程醒來列印的是做過2次運算的數據(++,--)所以是0
第二線程也一樣.
這涉及到多線程安全問題.

㈢ java中如何理解多個對象共享同一個靜態成員變數

要理解這個問題首先要知道一點,就是java的靜態成員變數是有一個獨立的存儲空間的。

假設一個類裡面如果有一個靜態變數s,那個這個類的多個實例所引用的s實際上是同一個。舉個例子吧

classA{
staticintnum=1;
privateStringname
publicStringgetName(Stringname){
returnname;
}
publicvoidsetName(Stringname){
{
this.name=name;
}
publicvoidshow(){
System.out.println("name:"+name+"num:"+num);
}
}
publicclassTest{
publicstaticvoidmain(String[]args){
Aa=newA();
a.setName("caseA");
a.num++;

Ab=newA();
b.setName("caseB);

a.show();
b.show();
}
}

可以看到輸出的num的值都是2

㈣ Java如何在幾個Java文件中共享數據

java實現共享數據可以將這些要共享的數據封裝到一個類里並且用靜態static修飾,當其他類要使用這些變數時,只需用這個類的類名.變數名即可。
事例代碼如下:
變數類:

public class Demo1 {
public static int a = 1;
public static int b = 2;
public static int c = 3;
}
使用變數的類:
public class Demo2 {
public static void main(String[] args) {
System.out.println(Demo1.a);
System.out.println(Demo1.b);
System.out.println(Demo1.c);
}
}
這里使用static的好處是變數經過static的修飾,在使用這些變數時不用再創建這個類出來,只需使用類名.變數名即可使用,節省了空間;還有需要注意的是變數名需要用public來修飾,保證再不同包下的類也能使用該類下的變數。

㈤ Java里如何做到一個變數成為共享數據

可以通過這個類的全局變數和定義一個減法的方法來實現呀.

按你說的例子我們可以這么寫

首先,定義一個要被共享變數的類:

publicclassShare{
staticinta=100;//定義一個值為100的靜態全局變數

publicstaticvoidminus(intvalue){//定義一個靜態方法
a=a-value;
}
}

創建一個測試類

publicclassTest{
publicstaticvoidmain(String[]args){
Share.minus(10);//比如我們要給上面的a變數減10
System.out.println(Share.a);//輸出之前定義的變數的結果為:90
}
}

㈥ 請教JAVA怎麼編寫多線程共享一個變數

多線程要麼集成Thread類 要麼實現Runnable 介面 入口都是public void run(){} 如果需要一個完善的可以做一個線程池.

㈦ java多線程中,共享數據變數 為什麼一定要定義private許可權

java是面向對象語言,一切成員都會封裝在一個類中,定義成private是為了更好地隱藏,對外暴露的是setter和getter方法,所以可以通過setter設置值,getter來取值,達到模塊隱藏的目的。

熱點內容
抗震柱加密區 發布:2025-01-17 03:03:06 瀏覽:134
幼兒園源碼php 發布:2025-01-17 02:41:45 瀏覽:401
win引導Linux 發布:2025-01-17 02:36:49 瀏覽:263
ftp是傳輸類協議嗎 發布:2025-01-17 02:36:47 瀏覽:311
查看電視配置下載什麼軟體 發布:2025-01-17 02:36:41 瀏覽:159
寶馬x330i比28i多哪些配置 發布:2025-01-17 02:35:59 瀏覽:573
伺服器運維安全雲幫手 發布:2025-01-17 02:35:48 瀏覽:72
c應用編程 發布:2025-01-17 02:35:16 瀏覽:941
ios清除app緩存數據免費 發布:2025-01-17 02:34:33 瀏覽:375
微信企業號上傳文件 發布:2025-01-17 02:10:28 瀏覽:64