关于java中的锁

问:知道哪些锁?

乐观锁和悲观锁。

问:乐观锁有哪些?悲观锁有哪些?

cas是乐观锁,synchronize和Lock都是悲观锁

问:synchronize和Lock的区别

Lock是一个接口,而synchronized是关键字。synchronized会自动释放锁,而Lock必须手动释放锁。Lock可以让等待锁的线程响应中断,而synchronized不会,线程会一直等待下去。通过Lock可以知道线程有没有拿到锁,而synchronized不能。Lock能提高多个线程读操作的效率。synchronized能锁住类、方法和代码块,而Lock是块范围内的。

 

问:synchronize底层的原理知道吗?

底层其实就是jvm的一个监视器monitor,同步代码块在编译前会在同步方法前加一个monitor.enter指令,退出方法或异常会加monitor.exit指令。其本质就是对一个对象监视器( Monitor )进行获取,而这个获取过程具有排他性从而达到了同一时刻只能一个线程访问的目的。

问:lock有哪些用法?

A.lock();此方式会始终处于等待中,即使其他线程B调用interrupt()也不能中断,除非线程A调用LOCK.unlock()释放锁。

LOCK.lockInterruptibly(): 此方式会等待,但当调用B.interrupt()会被中断等待,并抛出InterruptedException异常,否则会与lock()一样始终处于等待中,直到线程A释放锁。

LOCK.tryLock(): 该处不会等待,获取不到锁并直接返回false,去执行下面的逻辑。

LOCK.tryLock(10, TimeUnit.SECONDS):该处会在10秒时间内处于等待中,但当调用B.interrupt()会被中断等待,并抛出InterruptedException。10秒时间内如果线程A释放锁,会获取到锁并返回true,否则10秒过后会获取不到锁并返回false,去执行下面的逻辑。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值