【发布时间】:2016-09-21 03:37:36
【问题描述】:
我需要一些 JAVA 理论方面的帮助...
所以我最近发现,如果一个应用程序使用多个线程,并且不同线程有可能同时访问同一个共享变量,那么应该使用“同步”方法来获取/设置所述变量。
所以...在我的(位置感知)应用程序中,我有变量 LAT 和 LON 属于 MainActivity 并且是静态的。它们是从后台服务访问的,如下所示:
appendToPOST(MainActivity.LAT);
在 MainActivity 本身中,我使用的是 google play 位置服务,因此在 MainActivity 的 onLocationChanged() 回调方法中,我有:
LAT = [arbitrary Double value goes here];
因此,这意味着我应该实施:
public static synchronized void setLAT(Double inLAT){
LAT = inLAT;
}
public static synchronized void setLON(Double inLON){
LON = inLON;
}
public static synchronized Double getLAT(){
return LAT;
}
public static synchronized Double getLON(){
return LON;
}
对吗?感谢您的任何澄清/帮助。
补充:另外,我是否应该更改 onLocationChanged() 方法中的代码以使用同步方法,即使它与变量存在于同一个类中?
【问题讨论】:
-
在基本方面你是正确的,但
multitThreading有很大的话题,因为你有synchronized方法在你的情况下(所有方法)你编码它可以运行到DeadLock -
@Hosseini 死锁在给定示例中应该不是问题,因为
MainActivity类只有一个锁对象。线程是否持有此锁对象。但是,如果有其他类也与其他锁对象一起使用同步,那么死锁绝对是需要考虑的重要事项。根据经验,可以说:如果您的代码使用多个不同的锁对象,则需要以相同的顺序获取这些对象总是。不幸的是,确保这条规则并不总是那么容易...... -
我们在这里看不到任何东西而不是
getter/setter,我们只是说这不是每次我们需要保护state时都将其放入synchronized。
标签: java android methods static synchronized