シンクロナイズドブロック同期を取るブロック。synchronizedで修飾されたブロック。}」のように、ブロックの前にsynchronizedを付け、対象の変数を指定したもの。マルチスレッドにおいて、複数のスレッドが同時に処理することのできないブロック。synchronizedブロックは、処理するスレッドを1つに限定することができる。2つのスレッドからほぼ同時に実行された場合、先にブロック内に入った側がブロックから抜けない限り、後から入ろうとした側が待たされる。synchronizedブロックは、その「対象の参照型変数」が指し示すインスタンスが異なる場合には機能しない。synchronizedブロックは、対象のインスタンスが同じ場合にのみ待たせることができ、異なる場合には待たせない。これは、synchronizedブロックが「特定のインスタンスの同期を取る」ためのものだからである。複数のスレッドが同時にアクセスすると、先のスレッドがインスタンスの情報を書き換える前に後のスレッドがインスタンスの情報を読み取り、値が誤ったものになってしまう可能性があるからである。synchronizedブロックはそれを防ぐためのものである。インスタンスにアクセスする箇所をsynchronizedブロックとすることで、先のスレッドがブロック内を処理し終えるまで後のスレッドを待たせることができる。それにより、インスタンスの値を常に保つことができる。インスタンスが異なれば同期を取る必要はない。インスタンスが異なるとsynchronizedブロックが機能しないのはこのためである。この目的のため、synchronizedブロックは全て同期の対象となる。synchronizedブロックが複数存在する場合、同じように機能する。synchronizedブロックAがスレッド1に処理されている間に、synchronizedブロックBをスレッド2が処理しようとした場合、スレッド1がsynchronizedブロックAを通り過ぎるまで待たされる。synchronizedブロックを使用することで同期を取ることができるが、待ち時間が生じるため、動作に時間が掛かる可能性がある。synchronizedブロック以外にも、同期を取る機能としてsynchronizedスレッドがある。synchronizedメソッドは、synchronizedブロックをthisに対して行うものであり、自クラスのフィールドに対して排他制御を行いたい場合にはsynchronizedメソッドの方がいいだろう。別スレッドの方を呼び出します。