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

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

有时候需要同步的方法是静态方法,静态方法不需要创建对象就可以直接用“类名.方法名()”的方式调用。这时候读者就会有一个疑问,如果不创建对象,静态同步方法的锁就不会是this,那么静态同步方法的锁是什么?Java中静态方法的锁是该方法所在类的class对象,该对象是装载该类时自动创建,该对象可以直接用类名.class的方式获取。
采用同步代码块和同步方法解决多线程问题有好处也有弊端。同步解决了多个线程同时访问共享数据时的线程安全问题,只要加上同一个锁,在同一时间内就只能有一个线程被执行。但是线程在执行同步代码时每次都会判断锁的状态,非常消耗资源,效率较低。
全国13城校区全覆盖|黑马程序员AI大模型开发(Python),就近学习、全国就业
2026-04-08黑马程序员AI大模型开发(Python)|大厂共建+实战赋能,学完即具备企业项目能力
2026-04-08黑马程序员AI大模型开发(Python)|5阶段体系化教学,从入门到精通全覆盖
2026-04-08黑马程序员AI大模型开发(Python)|培养企业应用型人才,适配行业核心需求
2026-04-08黑马程序员AI智能应用开发|上市品牌背书,大厂联合研发,打造AI复合型人才
2026-04-08全国13城校区全覆盖|黑马程序员AI智能应用开发,就近学、就近就业
2026-04-08