请考虑以下代码段。
public Class RunThread extends Thread{
private boolean shouldContinueFlag;
public synchronized boolean shouldContinue(){
return shouldContinueFlag;
}
public void run(){
while(shouldContinue()){
//do stuff;
System.out.println("A");
}
}
}
public Class AccessThread {
// Somehow this class got RunThread Object and running in different thread context than RunThread.
public void AcessFunction(RunThread runThrObj){
if(runThrObj.shouldContinue()){
//Do other stuff
System.out.println("B");
}
}
}
困惑是 - 在条件下访问同步方法时RunThread的行为方式。它是否会获取类RunThread对象的锁定,然后打印' A'然后释放锁?或者它会创建一个临时变量来保存shouldContinue()的返回值,然后打印' A"?
提前致谢。
答案 0 :(得分:1)
是的,它将获取并释放while循环的迭代锁,这可能不是你想要做的。
答案 1 :(得分:1)
锁定在执行shouldContinue()期间持续,因此它将锁定,解锁,打印A.锁定,解锁,打印A,一遍又一遍。