私たちが持っているとしましょう
class A {
synchronized void m1() {
}
synchronized void m2() {
}
void m3() {
}
static void m6() {
synchronized(this){
}
}
}
およびクラス A a1&a2 の 2 つのインスタンス。
ここで、インスタンス a1 を持つスレッド t1 がメソッド m1 を呼び出す場合、インスタンス a1 を持つスレッド t2 は、t1 が m1 の実行を終了するまでメソッド m1 を実行できないという制限のみがあります。そして、インスタンス a2 を持つ t2 は m1() を実行できます。
今私の疑問は、a1 を持つスレッド t1 は、m1 の実行中に他のメソッド (m1 を除く) を並列に実行できますか?
b/w 同期ブロックと同期方式の違いは何ですか? 違いは、ブロックの同期範囲が狭いため効率的であるということだけですか?
「パラメーターとしてブロックに提供された式が null に評価される場合、同期ブロックは java.lang.NullPointerException をスローする可能性がある」という記事を読みました。
常に "this" を同期ブロックへのパラメーターとして使用するため、静的メソッド内で同期ブロックを使用するケースは常にあります。静的メソッドを実行するためにオブジェクト インスタンスを必要としないためです。
私はどこでそれを誤解しましたか?