・ 修飾子 synchronized と volatile

sysnchronized と volatile修飾子は、 複数のスレッドによって同一のデータが非同期にアクセスされ 処理に混乱や矛盾が生じるのを防ぎます。
sysnchronized は、 メソッドもしくは特定のオブジェクトとともに指定されたブロックを対象とします。 ブロックの場合は synchronized の指定を持つ処理が終わるまで 指定されたオブジェクトにロックがかかります。 synchronized の指定を持つメソッドは、そのメソッドを定義したオブジェクト自身に ロックをかけ、メソッドの処理が終わるまで他のスレッドから 内部のデータに同時にアクセスされることを防ぎます。

volatileは変数に対して指定します。 volatileの指定を受けた変数は、メモリーからのロードと格納の タイミングについて制限がかけられ、 複数のスレッドの処理による混乱から保護されます。