に同期ブロック内から設定されていない、私はこれに遭遇しましたJava/COM /アンドロイド/内部/位置/ GpsLocationProvider.java)mHandlerは、AndroidのSDKのAndroid SDKのフレームワークのソースコードを見ると
GpsLocationProviderThread
GpsLocationProvider
の内部クラスであり、mHandler
はGpsLocationProvider
のメンバーインスタンス変数です。この変数はこのスレッドのrun()
メソッド内から設定されますが、同期は適用されず、mHandler
はvolatile
ではありません。
これはなぜ機能しますか?そして、これが機能する時間の99%でも、必ずしも動作するとは限らず、確かに良い習慣ではありません。私はこの理解を訂正していますか、または私が誤解しているこのコードには微妙なものがありますか?
なぜ機能しないのですか?他のスレッドはmHandlerにアクセスしていますか?もっと文脈が必要です。 – EboMike
はい、mHandlerはメインスレッドまたはUIスレッドである外部スレッドからアクセスされます。 – skyler