考虑以下代码片段。
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 在 while 条件内访问同步方法时的行为方式。它会获取类 RunThread 对象上的锁,然后打印“A”,然后释放锁吗?或者它会创建一个临时变量来保存 shouldContinue() 的返回值,然后打印“A”?
提前致谢。
最佳答案
是的,它将获取和释放 while 循环迭代的锁,这可能不是您想要做的。
关于Java 从 while 条件调用同步函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29017571/