类锁和对象锁

论坛 期权论坛 脚本     
匿名技术用户   2020-12-21 23:46   74   0

类锁 和 对象锁

1.类锁

先定义这么一个类

ClassT(){

synchronized static methodA(){

}

}

那么 实例化两个对象之后

ClassT a;

ClassT b;

在这两个对象调用methodA时,第一个调用的会得到ClassT类的类锁, 第二个调用的要等到第一个调用结束后释放锁,才能完成调用。在这之前是线程堵塞,等待锁的释放。


2.对象锁

ClassT(){

synchronized methodA(){ //注意这个时候没有static

}

}

实例化两个对象

ClassT a;

ClassT b;

那么这两个对象调用methodA()方法时候是互相不干扰的。 即通过a.methodA()同步方法调用时候得到的是a的对象锁,而通过b.methodA()同步方法调用时候得到的是b的对象锁。


总结:

对象锁 锁的是 类的实例。 而类锁 锁的是类。 对象锁属于对象, 类锁属于类。 而静态方法是属于类的,非静态方法是属于对象实例的

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP