public class test1 {
private int a=1, b=2;
public void foo(){
a=3;
b=4;
}
public int getA(){
return a;
}
public int getB(){
return b;
}
}
当线程1执行foo方法的时候,线程2访问getA和getB会得到什么样的结果?A: a=1, b=2 //都未改变B: a=3,b=4 //都改变了C: a=3,b=2 //a改变了,b未改变D: a=1,b=4 //b改变了,a未改变
13 回答
已采纳
白绿色
TA贡献3条经验 获得超11个赞
其实答案是不定的,看哪个线程先抢到cpu时间。不能用代码的先后顺序决定线程的执行顺序。而且线程有没有加锁等等都会影响。
// 就这个例子来说大多数情况都变。 public static void main(String[] args) { final test1 t = new test1(); new Thread() { public void run() { t.foo(); } }.start(); new Thread() { public void run() { System.out.println(t.getA() + "--" + t.getB()); } }.start(); } // 但是实际项目中如果foo()执行的时间长,可能foo还没执行完,cpu就会把时间片切换到第二个线程执行。 // 所以每次的结果可能都不一样。 // 例如把foo()改成这样,让它的执行时间变长,可能就都不变。把循环次数改小,执行时间变短,可能都变 public void foo(){ long i = 0; while(i<1000000000) { int c = a + b; i++; } a=3; b=4; }
绿洲仙人球
TA贡献39条经验 获得超47个赞
建议提问者把输出调用方法的代码也贴出来,我通过new test1 的方法创建一个实例,然后调用方法,输出的答案是B
Java中没有全局变量的概念,需要分清是对变量的引用改值还是对变量本身改值
和木雪3217235
TA贡献13条经验 获得超4个赞
选A吧。不过不知道你的截图是不是整个题目的。虽然你定义了foo函数。在里面重新定义了A,B的值。但是你并没有对foo这个函数有过操作。所以,a、b的值都是原来初始化的时候的值、
添加回答
举报
0/150
提交
取消