@Test void test3() throws InterruptedException { Dog dog = new Dog(); System.out.println(getMark(dog,4)); synchronized (dog){ System.out.println(getMark(dog,4)); dog.hashCode(); System.out.println(getMark(dog,4)); } System.out.println(getMark(dog,4)); }
时间: 2024-03-03 10:49:35 浏览: 40
这段代码中,首先创建了一个Dog对象,并输出了它的标记。然后,在一个Synchronized代码块中,先输出了Dog对象的标记,然后调用了Dog对象的hashCode方法,最后再输出了Dog对象的标记。最后,又输出了Dog对象的标记。
在这段代码中,Synchronized代码块的锁对象是Dog对象,而在Synchronized代码块中调用了Dog对象的hashCode方法。由于hashCode方法并不会获取对象的锁,因此不会影响Synchronized代码块的同步和锁状态。
该代码输出结果类似于下面的内容:
```
Dog@hash1
Dog@hash1
Dog@hash1
Dog@hash1
```
其中,hash1是Dog对象的哈希值。可以看到,在Synchronized代码块中和在Synchronized代码块外部,输出的Dog对象的标记都是一样的,说明hashCode方法并没有对锁对象造成影响。
阅读全文