首页常见问题正文

Java培训:同步方法是否也存在锁?

更新时间:2023-12-06 来源:黑马程序员 浏览量:

IT培训班

  大家可能会有这样的疑问:同步代码块的锁是自己定义的任意类型的对象,那么同步方法是否也存在锁?如果有,它的锁是什么呢?答案是肯定的,同步方法也有锁,它的锁就是当前调用该方法的对象,也就是this指向的对象。这样做的好处是,同步方法被所有线程所共享,方法所在的对象相当于所有线程来说是唯一的,从而保证了锁的唯一性。当一个线程执行该方法时,其他的线程就不能进入该方法中,直到这个线程执行完该方法为止,从而达到了线程同步的效果。

1701825589105_同步方法是否也存在锁.jpg

  有时候需要同步的方法是静态方法,静态方法不需要创建对象就可以直接用“类名.方法名()”的方式调用。这时候读者就会有一个疑问,如果不创建对象,静态同步方法的锁就不会是this,那么静态同步方法的锁是什么?Java中静态方法的锁是该方法所在类的class对象,该对象是装载该类时自动创建,该对象可以直接用类名.class的方式获取。

  采用同步代码块和同步方法解决多线程问题有好处也有弊端。同步解决了多个线程同时访问共享数据时的线程安全问题,只要加上同一个锁,在同一时间内就只能有一个线程被执行。但是线程在执行同步代码时每次都会判断锁的状态,非常消耗资源,效率较低。

分享到:
在线咨询 我要报名
和我们在线交谈!