博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ReentrantLock和Synchronized
阅读量:6976 次
发布时间:2019-06-27

本文共 561 字,大约阅读时间需要 1 分钟。

1 synchronized

1.1 一旦没有获取到就只能一直等待

A和B都获取同一个对象锁,如果A获取了,B没有获取到,那么在A释放该锁之前,B只能无穷等待下去。

1.2 synchronized是不公平锁

所谓的不公平就是后来的线程可能先获取大锁,从而会导致线程饥饿。

1.3 synchronized直接使用Object的wait/notify

2 Reentrantlock

2.1 多个conditionn来使用wait/notify

它可以让同步于同一个锁的线程等待不同的条件,这个是synchronized做不到的。参见ArrayBlockingQueue的实现。

或者说,它对同步于同一个锁的线程进行了子集划分。

2.2 获取锁超时

2.3 获取锁中断

2.4 如果不使用锁超时接口,没有获取到锁的话也要一直等待

2.5 ReentrantLock可以是公平的也可以是非公平的

公平的话,就是说,线程按照先来后到排队,fifo,先到的先获取锁。

3 共同点

当ReentrantLock不使用tryLock的时候,它们的是一样的,同一时间只能一个线程获取到锁,其它人只能等待。也就是说,总体上它们是一样的。

 

转载于:https://www.cnblogs.com/hustdc/p/8922434.html

你可能感兴趣的文章
云计算解码:技术架构和产业运营
查看>>
提高代码质量 CheckStyle FindBugs PMD
查看>>
shell技巧之以逆序形式打印行
查看>>
Java面试题集(六)
查看>>
读枯燥的技术书时怎么集中精神?
查看>>
iOS 依据文本内容为TextView动态定义高度
查看>>
CCF系列之ISBN号码(201312-2)
查看>>
SQL Server 内存使用量下降问题
查看>>
问题MySQL server has gone away
查看>>
iOS的Cookie存取看我绝对够!!
查看>>
azkaban 安装
查看>>
GIX4中懒加载
查看>>
Git分布式开发之生成ssh公钥
查看>>
2013年终回顾:水下的世界
查看>>
tomcat排错过程
查看>>
自己的linux系统
查看>>
virus.win32.parite.h病毒查杀
查看>>
VC 实现线程池
查看>>
vim简单用法
查看>>
记一个最简单的多线程实例
查看>>