мне нужно помощь с некоторой теорией JAVA ...Синхронизированные методы и статические JAVA доступа к переменному/ANDROID
Так что я недавно обнаружил, что если приложение использует несколько потоков, и существует возможность различных потоков к тому же общей переменной в то же время, то следует использовать «синхронизированные» методы для получения/установки указанной переменной.
Так что ... в моем (местоположении) приложении, у меня есть переменные LAT и LON, которые принадлежат к MainActivity и являются статическими. Они доступны из справочных услуг, как так:
appendToPOST(MainActivity.LAT);
И в самом MainActivity, я использую службу определения местоположения Google Play, и поэтому в) методе обратного вызова onLocationChanged (в MainActivity, у меня есть:
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' имеют огромную тему, так как у вас есть« синхронизированные »методы в вашем случае (все методы), которые вы кодируете, его можно запустить в [DeadLock] (http://www.javaworld.com /article/2075692/java-concurrency/avoid-synchronization-deadlocks.html) – Hosseini
@ Hosseini deadlocks не должны быть проблемой в данном примере, поскольку только один объект блокировки является классом 'MainActivity'. Либо нить держит этот объект блокировки, либо нет. Однако, если есть другие классы, которые используют синхронизацию также и с другими объектами блокировки, взаимоблокировки в конечном счете важны для рассмотрения. Как правило, можно сказать: если ваш код использует несколько разных объектов блокировки, эти объекты ** всегда ** должны быть приобретены в том же порядке. К сожалению, не всегда так легко обеспечить это правило ... – dpr
здесь мы не видим ничего, кроме 'getter/setter', мы просто говорим, что это не каждый раз, когда нам нужно защищать' state' помещать его в ' синхронизированный'. – Hosseini