gpt4 book ai didi

java - 同步方法和静态变量访问 JAVA/ANDROID

转载 作者:行者123 更新时间:2023-11-29 04:45:21 26 4
gpt4 key购买 nike

我需要一些 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() 方法中的代码以使用同步方法,即使它与变量存在于同一个类中?

最佳答案

首先,同步静态方法 是 Java 的内置锁类型。他们使用类对象作为一把锁,所以一次只有一个线程可以与类一起工作。如果一个线程执行其中一种方法,则其他线程无法执行任何对象方法。这是锁定类型的同步。它会影响性能。但如果不需要高性能,此解决方案将起作用。您需要使用 synchronized 关键字读取/更改数据的标记方法。

其次,我假设您的变量表示位置坐标:纬度和经度。如果是这样,则必须一起访问它们。您可以创建新的复合类。如果不同时访问它们,可能会导致竞争条件。

PS:让我们知道同步是否会影响性能。有类级别的非锁定解决方案。

关于java - 同步方法和静态变量访问 JAVA/ANDROID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37404833/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com