java 监视器是什么意思,7.1监视器-Java同步的基本思想

如果你在大学学习过操作系统这门课,监视器是操作系统中做同步的重要概念(额,我真没听过,难道翻译过来的不一样)。它也用于Java同步。这个帖子用类比来解释“监视”的基本思想。

1.什么是监视器

监视器可以看做包含特殊事物的房间。这个特殊房间一次只能被一个消费者(线程)暂用。这个房间通常包含一些数据和代码。

3e06033b0326

监视器房间

如果客户想要占用这个特殊房间,他必须进入走廊(hallWay)才能等到。调度器会根据特定的算法(比如先进先出)来选择一个。如果它被某种原因挂起了,他将会被送到等候室,以后按照调度进入这个特殊房间。如上图所示,这个建筑物有三个客房。

3e06033b0326

访问特殊代码

简而言之,监视器是确保每次只有一个线程来访问特定的代码和数据的装置。

2.它是怎么在Java中实现的?

在Java虚拟机中,每个对象和类都与监视器相关联。为了实现监视器的互斥能力,锁(有时称为互斥)和每个对象和类相互关联。这在操作系统书中被称为信号量,互斥是为二维信号量。

如果一个线程拥有某些数据的锁定,那么其他线程将不能获得锁直到拥有该锁的线程释放它为止。如果我们在多线程编程中一直操作一个信号量将不方便。幸运的Java虚拟机自动为我们做了这些。

要声明一个监视区,意味着数据不能被多个线程访问,Java提供同步语句和同步方法。一旦代码嵌入了synchronized关键字,它就是一个监视器区域。这些锁由Java虚拟机自动实现。

3.在Java的同步代码中,哪部分是监视器?

我们知道任何一个类或对象都和监视器绑定。我认为每个对象都有个监视器是很好的,因为每个对象可以有自己的关键部分(能够见识线程序列)。

为了启用不同的线程协作,Java提供wait()和notify()来挂起一个线程,并分别唤醒另一个在此对象等待的线程。另外还有三个其他版本:

wait(long timeout, int nanos)

wait(long timeout) notified by other threads or notified by timeout.

notify(all)

这些方法只能在synchronized语句或synchronized方法中调用。原因,如果一个方法不需要互斥,那么就不需要线程之间的监视或协作,每个线程都可以自由地访问他们。

下面是同步代码的示例:

Reference:1. Java Doc for Object

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值