Java 当我们有更简单的方法时,为什么要使用同步关键字
使用一个变量,我们可以确保在任何时候只有一个方法执行在进行中,请参阅下面建议的代码。我想知道为什么我们要用synchronized呢Java 当我们有更简单的方法时,为什么要使用同步关键字,java,Java,使用一个变量,我们可以确保在任何时候只有一个方法执行在进行中,请参阅下面建议的代码。我想知道为什么我们要用synchronized呢 public class Test { private static boolean lock = false; public void testMethod() { if(lock){ System.out.println("Method run is in progress"); return; } l
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;
}
}
不是那么简单
方案的一个简单反例是:如果两个线程同时遇到函数testMethod
,那么两个线程都可以将lock
视为false
这同样适用于finally
块中的代码。它并不是那么简单
方案的一个简单反例是:如果两个线程同时遇到函数testMethod
,那么两个线程都可以将lock
视为false
这同样适用于
finally
块中的代码。同步的提供了“锁”没有提供的东西
同步是可重入的,持有锁的线程可以重新进入关键部分
Synchronized为互斥体和部分中的数据提供了新的可见性,您将无法在多线程环境中获得lock
的实际值李>
对比赛条件
和记忆障碍
进行一些研究同步
提供了你的“锁”没有的东西
同步是可重入的,持有锁的线程可以重新进入关键部分
Synchronized为互斥体和部分中的数据提供了新的可见性,您将无法在多线程环境中获得lock
的实际值李>
对比赛条件和记忆障碍做些研究不,你不能。。。进入的两个线程都将遇到lock==false
并继续它们的方式。在您的示例中,如果方法被锁定,则不会执行其主体。然而,同步使线程等待,然后继续执行。谢谢@wero这似乎是一个很好的理由,请不要使用否决票来反映您对问题的明显性质的失望。我觉得这个问题很好。伙计们,请记住基本问题不是必要的坏问题不,你们不能。。。进入的两个线程都将遇到lock==false
并继续它们的方式。在您的示例中,如果方法被锁定,则不会执行其主体。然而,同步使线程等待,然后继续执行。谢谢@wero这似乎是一个很好的理由,请不要使用否决票来反映您对问题的明显性质的失望。我觉得这个问题很恰当。伙计们,请记住,基本问题并不是一个坏问题