同步方法中存在锁吗?
来源传智教育2022年06月24日 16时59分54秒
同步代码块的锁是自己定义的任意类型的对象,那么同步方法是否也存在锁?如果有,它的锁是什么呢?答案是肯定的,同步方法也有锁,它的锁就是当前调用该方法的对象,也就是this指向的对象。这样做的好处是,同步方法被所有线程所共享,方法所在的对象相对于所有线程来说是唯一的,从而保证了锁的唯一性。当一个线程执行该方法时,其他的线程就不能进入该方法中,直到这个线程执行完该方法为止,从而达到了线程同步的效果。
有时候需要同步的方法是静态方法,静态方法不需要创建对象就可以直接用“类名.方法名()”的方式调用。这时候读者就会有一个疑问,如果不创建对象,静态同步方法的锁就不会是this,那么静态同步方法的锁是什么?Java中静态方法的锁是该方法所在类的class对象,该对象在装载该类时自动创建,该对象可以直接用类名,class的方式获取。
采用同步代码块和同步方法解决多线程问题有好处也有弊端。同步解决了多个线程同时访问共享数据时的线程安全问题,只要加上同一个锁,在同一时间内就只能有一个线程被执行。但是线程在执行同步代码时每次都会判断锁的状态,非常消耗资源,效率较低。
最新问答
相关问答
- 2022年06月02日本科计算机专业毕业,想在广州参加Java培训,有什么需要注意的吗?
- 2022年06月02日广州java培训价格大概多少?
- 2022年06月02日在广州想报名一家Java培训机构,怎么选择?
- 2022年06月01日error类和exception类有什么区别?
- 2022年06月01日Java中的继承概念是什么?
- 2022年06月01日面向对象的三大特性是什么?
- 2022年06月01日java中类与对象的关系是什么
- 2022年05月31日java的数组排序方法是什么?
- 2022年05月24日Java中二进制转十进制的方法是什么?
- 2022年05月24日零基础想学Java很难吗?