...synchronizedメソッドと静的変数のアクセスJAVA /アンドロイド
だから私は最近、もしアプリが複数のスレッドを使用し、共有同じにアクセスする別のスレッドのいずれかの可能性があることを発見同じ変数を取得/設定するには、 "synchronized"メソッドを使用する必要があります。
私の(位置認識)アプリでは、LATとLONの変数がMainActivityに属しており、静的です。
appendToPOST(MainActivity.LAT);
をそしてMainActivity自体に、私はGoogle Playで位置情報サービスを使用していますし、そうMainActivityでonLocationChanged()コールバックメソッドでは、私が持っている:彼らはそうのようなバックグラウンドサービスからアクセスされている
LAT = [arbitrary Double value goes here];
したがって、実装する必要があることを意味します。
正しいですか?明確化/助けていただきありがとうございます。
追加:変数と同じクラスに存在していても、synchronizedメソッドを使用するようにonLocationChanged()メソッドのコードを変更する必要がありますか?
基本的な方法で、あなたは正しいですが、あなたの場合(すべてのメソッド)で 'synchronized'メソッドを持っているので、' multitThreading'は巨大なトピックを持っているあなたは、そのは、[デッドロック](http://www.javaworld.comに走っできるコード唯一のロックオブジェクト 'MainActivity'クラスが存在するように/article/2075692/java-concurrency/avoid-synchronization-deadlocks.html) – Hosseini
@Hosseiniデッドロックは、与えられた例では問題にならないはずです。スレッドがこのロックオブジェクトを保持しているかどうか。他のロックオブジェクトと同様に同期を使用する他のクラスがある場合は、デッドロックが決定的に考慮すべき重要なことです。経験則として1を言うことができます:あなたのコードが使用されている場合は、複数の異なるロックは、これらのオブジェクトをオブジェクト**常に**同じ順序で取得する必要があります。残念ながら、それは我々が代わりにここで 'ゲッター/ setter'の任意のものが表示されていない、私たちはただ、これは仕方我々は' 'に入れてstate'保護する必要があるたびはないと言う – dpr
...このルールを確保するために、常にその簡単ではありません同期化される。 – Hosseini