当前位置: 技术问答>java相关
昨天参加SCJP中遇到的一题
来源: 互联网 发布时间:2015-02-07
本文导语: 题目程序: public class Test { private int x; private int y; private synchronized void setX(int i){ x = i; } private synchronized void setY(int i){ y = i; } public voi...
题目程序:
public class Test {
private int x;
private int y;
private synchronized void setX(int i){
x = i;
}
private synchronized void setY(int i){
y = i;
}
public void setXY(int i){
setX(i);
setY(i);
}
public synchronized boolean check(){
return x != y;
}
}
问:
什么情况下调用check()会返回true?
选项记不清了,大概有
永远不会
用多线程调用check()方法
我不太明白,请大家讨论讨论这道题
public class Test {
private int x;
private int y;
private synchronized void setX(int i){
x = i;
}
private synchronized void setY(int i){
y = i;
}
public void setXY(int i){
setX(i);
setY(i);
}
public synchronized boolean check(){
return x != y;
}
}
问:
什么情况下调用check()会返回true?
选项记不清了,大概有
永远不会
用多线程调用check()方法
我不太明白,请大家讨论讨论这道题
|
public void setXY(int i)没有同步,所以就当多个线程同时访问的时候就有可能出现X和Y的值不一致的情况……比如第一个线程把X设为1后进入休眠,然后第二个线程把X和Y都设为2,然后第一个线程退出休眠,把Y设为1……
明白了吗?
明白了吗?
|
应该是多线程同时调用setXY()时会有可能出现x!=y的情况,我考试时也碰到了这个题目,一模一样的,原因就是ender说的了,反正我做对了,因为我的thread部分是满分(我有6个满分,哈!)
|
用多线程调用check()方法。
在多线程程序中如果多个线程共享相同的对象,且每一个线程都调用了能改变它状态的方法,按照对象被访问次序的不同,会产生不同的不可靠对象,即不确定性。本题的check()方法没有使用同步化机制(synchronized),当一个线程在执行check()方法的某步时就有可能被中断使得 x 、 y的值不确定。
在多线程程序中如果多个线程共享相同的对象,且每一个线程都调用了能改变它状态的方法,按照对象被访问次序的不同,会产生不同的不可靠对象,即不确定性。本题的check()方法没有使用同步化机制(synchronized),当一个线程在执行check()方法的某步时就有可能被中断使得 x 、 y的值不确定。
|
用多线程调用check()方法
|
这道题的提问部分是否应为:
在调用了setXY(i)后,什么情况下调用check()会返回true?
否则我对以上各位的解释非常非常的不懂
如果没有“在调用了setXY(i)后”这个条件,还请各位在详细解释解释
在调用了setXY(i)后,什么情况下调用check()会返回true?
否则我对以上各位的解释非常非常的不懂
如果没有“在调用了setXY(i)后”这个条件,还请各位在详细解释解释