前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >synchronized与ReentrantLock区别与联系

synchronized与ReentrantLock区别与联系

原创
作者头像
javaNice
发布2023-12-08 10:14:03
1130
发布2023-12-08 10:14:03
举报
文章被收录于专栏:javanicejavanice

synchronized与ReentrantLock区别与联系

1.有了synchronized为什么会出现ReentrantLock

synchronized也有一定的局限性,例如:

  1. 当线程尝试获取锁的时候,如果获取不到锁会一直阻塞,这个阻塞的过程,用户无法控制
  2. 如果获取锁的线程进入休眠或者阻塞,除非当前线程异常,否则其他线程尝试获取锁必须一直等待
2.三个方面比较
  1. 可重入锁:可重入锁是指同一个线程可以多次获得同一把锁;ReentrantLock和关键字Synchronized都是可重入锁
  2. 可中断锁:可中断锁时子线程在获取锁的过程中,是否可以相应线程中断操作。synchronized是不可中断的,ReentrantLock是可中断的
  3. 公平锁和非公平锁:公平锁是指多个线程尝试获取同一把锁的时候,获取锁的顺序按照线程到达的先后顺序获取,而不是随机插队的方式获取。synchronized是非公平锁,而ReentrantLock是两种都可以实现,不过默认是非公平锁

ReentrantLock常用的方法

  1. isHeldByCurrentThread:实例方法,判断当前线程是否持有ReentrantLock的锁

获取锁的4种方法对比

获取锁的方法

是否立即响应(不会阻塞)

是否响应中断

lock()

×

×

lockInterruptibly()

×

tryLock()

×

tryLock(long timeout, TimeUnit unit)

×

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • synchronized与ReentrantLock区别与联系
    • 1.有了synchronized为什么会出现ReentrantLock
      • 2.三个方面比较
      • ReentrantLock常用的方法
      • 获取锁的4种方法对比
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档