【发布时间】:2019-03-15 06:29:30
【问题描述】:
您可能认为这个问题与this 重复,但没有该问题的答案有助于我理解android 中的synchronized 方法。我在谷歌上搜索了很多以了解synchronized 方法,我找到了一些答案,但它们并没有帮助我完全理解Synchronized 方法,因为没有答案有任何完美的实际示例。
我试图通过在我的代码中实现 2 个synchronized 方法并同时执行它们来理解synchronized 方法,但我未能正确实现它们。所以,请用简单例子解释synchronized方法,这样我这样的人也可以简单快速地理解它。
更新
我不确定我是否朝着正确的方向前进,但我尝试了以下具有 2 个同步方法的代码。
synchronized void add() {
counter++;
Log.e("JK", String.valueOf(counter));
}
synchronized void minus() {
counter--;
Log.e("JK", String.valueOf(counter));
}
我已经使用下面的代码在两个不同的线程中调用了这个方法。
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
synchronized (counter++) {
add();
}
}
},500);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
minus();
}
},1000);
【问题讨论】:
-
请将您的代码减少到最小可能的示例,以重现您的问题并发布它。您现在要求我们解释同步的整个概念,如果不做任何更改,它就有资格被关闭为“过于宽泛”。
-
好的...让我发布我的代码。 @Torben
-
@Torben 请查看更新后的问题。
-
synchronized(counter++) {add();}的使用不正确,add方法已经同步,不需要放在runnable的同步块中。此外,计数器似乎是共享资源,您不希望同时从 2 个线程访问它。这意味着您应该仅从同步方法中更改它
标签: java android synchronized