- 第一种,锁在方法上,这种很好理解


- 第二种,锁变量

关于这个锁我一开始理解的是在执行完synchronized代码块之前,对于this.name的操作是不能进行的,比如this.name.charAt,然而


从结果可知,在锁期间我还是可以对name进行操作,所以正确理解应该是我拿到了name这个对象的锁,在其他用到这个锁的地方才会起作用,比如


- 第三种,锁对象实例,其实这个和第二种是一样的,因为java里一切皆对象,成员变量也是对象


可以看出第一种方发锁其实锁的就是对象实例
- 第四种,锁类


可以看出构造器也是属于类锁的范围
总结如下:java中的synchronized其实就是那一个实例当做一把锁,类其实你可以看做一个特殊的对象,因为类定义在整个jvm中只有一份。任何用到这个锁的地方都会被阻塞直到拿到锁。
网友评论