使用变量我们可以确保任何时候只有一个方法正在执行,请参阅下面的建议代码。我想知道为什么我们使用synchronized呢?
public class Test {
private static boolean lock = false;
public void testMethod() {
if(lock){
System.out.println("Method run is in progress");
return;
}
lock=true;
try{
System.out.println("Doing some stuffs here");
}
catch(Exception e){
}
finally{
lock=false;
}
return;
}
}
答案 0 :(得分:2)
这不是那么简单。
您的方案的一个简单反例:如果两个线程同时遇到您的函数testMethod
,则两者都可以将lock
视为false
。
同样适用于finally
块中的代码。
答案 1 :(得分:1)
synchronized
提供的关键词#{}}锁定"没有按'吨
reentrant
,持有锁的线程可以重新进入关键部分。lock
的实际值。 对race-conditions
和memory-barriers