私はどこかで、これらの次のコードの断片が同期化されたコードに関して同等であることを読みました:
public synchronized void printMsg() {
System.out.println("synchronized");
}
public void printMsg() {
synchronized(this) {
System.out.println("synchronized");
}
}
私の知る限り、スレッドがオブジェクトの同期されたメソッドにアクセスするとき、その同期されていないメソッドはロックされません。つまり、他のスレッドは同じインスタンスを使用してそれらにアクセスできます。
2番目のフラグメントを観察すると、コードがで同期されているため、this
そのコードにアクセスするスレッドがオブジェクトのロックを取得しているように見えます。
私の質問は、ThraedprintMsg()
が2番目のコードスニペットを使用してメソッドを実行するロックを維持しているときに、他のスレッドが他のクラスメソッドにアクセスできるかどうかです。
いいえの場合、上記の方法はまったく同じではありません。何が本当?