了解mutal排除锁定

时间:2015-07-08 09:25:19

标签: java multithreading

我正在阅读有关ReadWriteLock的文档

  

读写锁是否会提高使用性能   互斥锁取决于数据的频率   读取与被修改相比,读取和写入的持续时间   操作,以及对数据的争用 - 即数量   将尝试同时读取或写入数据的线程。

"互斥锁定"意思?这是否意味着我们一次只能执行一次操作(读取或写入)?例如,只是一个同步块。

1 个答案:

答案 0 :(得分:3)

互斥锁定将确保一次只能执行一项操作(一个读者或一个编写者)。

根据ReadWriteLock

的javadoc
  

只要没有写入器,读取锁可以由多个读取器线程同时保持。写锁是独占的。

在实践中,这意味着如果你有大量的作家,那么读者就很难获得访问权,因为单个作家会锁定所有读者。或者,如果您有许多读者执行短读取,那么ReadWriteLock的开销将比简单的互斥锁更糟糕,因为ReadWriteLock的开销要大得多。

我已经解释了javadoc的这一部分:

  

例如,最初填充数据并且之后不经常修改但经常搜索的集合(例如某种目录)是使用读写锁的理想候选者。但是,如果更新变得频繁,那么数据的大部分时间都会被完全锁定,并且并发性几乎没有增加。此外,如果读取操作太短,则读写锁定实现的开销(本质上比 互斥锁 更复杂)可能会占据执行成本,特别是因为许多读写锁实现仍然通过一小段代码序列化所有线程