一道关于多线程的有关问题,求解答
一道关于多线程的问题,求解答
public class SychTest{
private int x;
private int y;
public void setX(int i){ x=i;}
public void setY(int i){ y=i;}
public Synchronized void setXY(int i){
setX(i);
setY(i);
}
public Synchronized boolean check(){
return x!=y;
}
}
在下列哪种情况下,check()方法在被另一个不同的类调用时会返回true?
A) check() 永远也不会返回true。
B) 当通过多线程调用setXY () 时check() 能够返回true。
C) 当通过多线程单独调用setX() 和setY()时check() 能够返回true。
D) 只有当SychTest 被改为允许x和y单独设值时check() 才能够返回true。
这个题是考多线程的知识,可是我只是知道它考试多线程,但是具体的知识我就不知道怎样解决了,请高手指点一下这道题的
考的具体内容,谢谢
------解决方案--------------------
个人观点:
答案c.
这个题考的是synchronized 的作用。
------解决方案--------------------
同步的意义
就是使2个内容 不会出现延迟显示
所以如果 不执行 那个setXY 同步方法的话
就不会让2个变量在同一时间 一起设置 于是就可能出现不同
于是就会返回true
public class SychTest{
private int x;
private int y;
public void setX(int i){ x=i;}
public void setY(int i){ y=i;}
public Synchronized void setXY(int i){
setX(i);
setY(i);
}
public Synchronized boolean check(){
return x!=y;
}
}
在下列哪种情况下,check()方法在被另一个不同的类调用时会返回true?
A) check() 永远也不会返回true。
B) 当通过多线程调用setXY () 时check() 能够返回true。
C) 当通过多线程单独调用setX() 和setY()时check() 能够返回true。
D) 只有当SychTest 被改为允许x和y单独设值时check() 才能够返回true。
这个题是考多线程的知识,可是我只是知道它考试多线程,但是具体的知识我就不知道怎样解决了,请高手指点一下这道题的
考的具体内容,谢谢
------解决方案--------------------
个人观点:
答案c.
这个题考的是synchronized 的作用。
------解决方案--------------------
同步的意义
就是使2个内容 不会出现延迟显示
所以如果 不执行 那个setXY 同步方法的话
就不会让2个变量在同一时间 一起设置 于是就可能出现不同
于是就会返回true
- Java code
class Demo{ private int x; private int y; public void setX(int i){ x=i; } public void setY(int i){ y=i; } public synchronized void setXY(int i){ setX(i); setY(i); } public synchronized boolean check(){ return x!=y; } } public class Demo01{ public static void main(String[] args) { Demo d = new Demo(); d.setX(3); d.setY(4); //d.setXY(5); System.out.println(d.check()); } }
------解决方案--------------------
其实楼主自己写一个卖票的例子 并且加入 延迟
就会对synchronized 这个 关键字理解的更深