java线程共享变量
A. java堆内存被所有线程所共享,不明白2个线程如何共享2个对象中的同名变量。
首先:堆内存共享是相对于栈内存的。栈是每一个线程都独有的,线程之间互不一向,每一个线程都有自己的栈内存。但是堆内存不一样,在一个JVM实例里面,不管你有多少线程,创建了多少对象,都是放在一块堆内存的。也就是说一个JVM实例栈内存区域是有多个,每一个线程持有一个,而堆内存只有一个,是线程共享的。
其次:针对你这个代码,这个情况下每一个线程确实是对应着不同的对象。也就是在同一个堆(也只有一个堆)里面创建了两个Demo对象。你老师的意思应该是
Demo demo = new demo();
Thread S1=new Thread(demo);
Thread S2=new Thread(demo);
这样两个线程都是操作堆内存共享的对象。
B. Java里如何做到一个变量成为共享数据
你这个必须要使用面向对象的思想写,在一个类里面定义那个变量,然后赋值,最后在其它类里面调用:
test1.java代码:
public class test1 {
private double a = 100;
//给变量a赋值
public double geA() {
return a;
}
//获得变量a的值
public void setA(double num){
this.a -= num;
}
}
test.java里面的代码:
import java.util.Scanner;
public class test {
public static void main(String[] args) {
test1 tt = new test1();
System.out.print("请输入一个数值:");
Scanner input = new Scanner(System.in);
double inputNum = input.nextDouble();
tt.setA(inputNum);
System.out.println(tt.geA());
}
}
我使用了面向对象的三大特性之一的封装