祝一切顺利~
文章目录
- synchronized 与 ReentrantLock的区别
synchronized 与 ReentrantLock的区别
1.ReentrantLock的锁是公平锁,synchronized是非公平锁.(公平锁是指当锁被释放时,由等待时间最长的线程获取锁.非公平锁是锁被释放时,所有线程不论等待时间长短,都一起去竞争)
2.ReentrantLock提供更灵活地等待方式.
如下图,线程t2使用的加锁方法是r.tryLock(),这个方法有两个版本.
不带参数的指如果获取不到锁,t2就直接放弃.
带参数的会指定一个最长等待时间,到了时间还没获取到锁,就放弃.
带参数的格式如下图,第一个参数是数字,第二个参数是单位,代表等待时间.
3.ReentrantLock提供更方便的等待通知机制.
synchronized搭配wait(),notify().notify()时,会随机唤醒一个线程.
ReentrantLock搭配condition类,可唤醒指定线程
4.synchronized针对()内的对象进行加锁.
ReentrantLock的锁对象是自己创建的ReentrantLock对象.
哒哒