monitor(同步)

       在阅读Java并发相关源码的时候,有很多地方都提到了monitor对象,比如在Object对象的notify()方法的注释中,就提到该方法是用于唤醒在等待当前对象monitor对象的线程,如果有多个等待线程,会选一个线程唤醒。但是一直没搞明白monitor对象是基于什么机制实现的。查资料的时候看到了维基百科的解释,是比较完整的,特此翻译记录。

       本文翻译自维基百科,原文地址:https://en.wikipedia.org/wiki/Monitor_%28synchronization%29

       在并发编程中,monitor是一个同步块,允许线程有同步互斥和等待(阻塞)特定条件变为false的能力。monitor同样有一个机制,可以通知其他的线程,当它们等待的条件满足的时候。monitor由一个互斥(锁)对象和条件变量组成,条件变量本质上是一个包含等待特定条件的线程的容器。monitor提供了一种机制,可以让线程暂时的放弃进入互斥的权利,从而可以在重新获取互斥操作和重新消费任务的时候,先等待条件的满足。

       Monitor的另外一种定义是一个线程安全的类、对象或者模块,它封装了互斥锁,可以让多个线程安全的访问一个方法或变量。monitor定义的特性是,它的方法可以互斥的执行:在任何时间点,最多一个线程可以执行它的任何一个方法。通过使用一个或多个条件变量,它同样可以提供多个线程等待某个特定条件的能力(即上面关于monitor的定义)。这篇文章剩下的部分,monitor都是指的线程安全的对象/类/模块。

       Monitor是Per Brinch Hansen和C.A.R.Hoare提出来的,最早是在Brinch Hansen的并发Pascal语言中做了实现。

       

发布了30 篇原创文章 · 获赞 4 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/u013015681/article/details/104884671