私はアンドロイドでコーディングする方法を学んでいるアナログの男なので、この質問がばかげているように聞こえる場合はご容赦ください。
同期の要点がわかりました。2 つのスレッドがアクセスして変更できるデータがある場合、両方のスレッドのデータ変数の値が矛盾する可能性があります。
メソッドを同期させ、1 つのスレッドが実行を完了する (条件付きチェックを実行する) までメソッドをロックすることは理にかなっていますが、単一のステートメントでそれが問題になるのはなぜでしょうか? 2 つ以上のステートメントの間にスレッド 1 が実行可能な状態から外れる可能性があるため、複数のステートメントで問題になりますが、単一のステートメントのポイントがわかりません。
ここに例があります
ゲームスレッドから呼び出すことができるリスナーがあり、それがデータ変数を変更する場合、なぜこのようにするのでしょうか...
public void onCompletionListener(MediaPlayer player){
synchronized (this){
isPrepared = false;
}
}
Music クラスには stop という別のメソッドもあります
public void stop(){
mediaPlayer.stop()
synchronized(this){
isPrepared = false;
}
}
なぜわざわざこれをするのですか?これは、2 つのスレッド間の値の一貫性のために行われますか? もしそうなら、私は揮発性のようなものを使うことができますか? そのほうがいいでしょうか?
同期はお金がかかると聞いたので質問します。より良い代替手段はありますか?
私の質問に答えてくれてありがとう。それは有り難いです。編集:この同期を単一のステートメントで読みましたか?
私は理解していると思います..誰かがそれを詳しく説明できれば素晴らしいでしょう。また、 volatile がより良い代替手段であるかどうかに関する私の最初の質問のパート2には回答がありません:)