Java 锁机制

类锁与对象锁互不影响
 * 不同对象的锁也互不影响
 * 对象锁可以有多个
 * 内置锁是一种特殊的对象锁,类对象创建的时候,就分配给一个内置锁



内置锁的可重入性:
 * 线程进入doSomething()方法时,此时拿到了LoggingWidget实例对象的锁,随后又调用了父类的doSomething(),它又是被synchronized修饰的
 * 现在我们的LoggingWidget的锁还没有释放,进入父类的widget的doSomething()还需要一把锁吗?
 * 不需要的!
 * 因为锁的持有者是线程,而不是调用,线程A已经持有了LoggingWidget的实例对象的锁了,当再需要的时候,不需要再申请锁,而是直接可以进入的
 * ,这就是内置锁的可重入性
 *
 *
 * 锁释放的时机:1.当方法(代码块)执行完毕后会自动释放锁,不需要做任何的操作。
 *            2.当一个线程执行的代码出现异常时,其所持有的锁会自动释放。
 *            不会由于异常导致出现死锁现象~




Lock方式来获取锁支持中断、超时不获取、是非阻塞的
     * 提高了语义化,哪里加锁,哪里解锁都得写出来
     * Lock显式锁可以给我们带来很好的灵活性,但同时我们必须手动释放锁
     * 支持Condition条件对象
     * 允许多个读线程同时访问共享资源

公平锁:
    线程将按照他们发出请求的顺序来获取锁
非公平锁:
    线程获取锁的顺序与申请获取锁的顺序可以不同

Lock和synchronize都是默认使用非公平锁的。如果不是必要的情况下,不要使用公平锁
公平锁会来带一些性能的消耗的
测试:一个类里, A、B两个方法都加锁,C线程访问A的时候,D线程可以访问B吗
* <p>
* 测试答案:需要确定A与B加的是否是同一种类型的锁,如果都加的类锁,或者都加的对象锁,那么C线程访问A的时候,D线程不能访问B
*         如果持有的锁不同,那么是可以访问的。
*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值