多线程-Java中的对象监视器是什么意思? 为什么要使用这个词?

在阅读有关Java线程的文章时,我经常注意到这样的表达:“当前线程是该对象的监视器的所有者”。 我的意思是:线程有权在对象上进行操作。 但是我很困惑,为什么我们使用“对象的监视器”而不是“对象的锁”?

简而言之,我不知道“监控”一词的含义这个问题可能很奇怪而且很简单。 但我希望任何人都能帮助解决它。3KS

6个解决方案

44 votes

但是我很困惑,为什么要使用“对象的监视器”一词而不是“对象的锁”?

请参阅ulmangt的答案以获取在此上下文中解释“监视”一词的链接。

为什么使用术语“监视”而不是“锁定”? 严格来说,这些术语的含义确实有所不同……尤其是如果您以最初打算使用的方式使用它们。

“锁”是指具有获取和释放原语的东西,这些原语和原语保持某些锁属性。 例如 专用或单作者/多读者。

“监视程序”是一种机制,可确保在任何给定时间只有一个线程可以执行给定的代码段。 可以使用锁(和“条件变量”,允许线程等待或通知满足条件的其他线程)来实现此功能,但它不仅仅是锁。 实际上,在Java情况下,不能直接访问监视器使用的实际锁。 (您不能说“ Object.lock()”来阻止其他线程获取它,就像使用Java Lock实例一样。)

简而言之,如果要学究的话,“ monitor”实际上是比“ lock”更好的术语,用于描述Java提供的特性。 但是实际上,这两个术语几乎可以互换使用。

Stephen C answered 2019-09-24T08:12:08Z

20 votes

监视器只是一个对象的术语,其方法可以在多线程环境中安全使用。

在Monitors上有一篇很棒的Wikipedia文章:

[http://en.wikipedia.org/wiki/Monitor_(synchronization)]

如果向下滚动,甚至还会有专门关于Java的部分。

ulmangt answered 2019-09-24T08:12:54Z

5 votes

它的监视器是object周围的synchronized块,它控制对象上的锁定。 这是一个例子

synchronized (object) {

while ()

object.wait(timeout);

... // Perform action appropriate to condition

}

abbas answered 2019-09-24T08:13:20Z

4 votes

尽管现在回答这个问题已经很晚了,但我还是想补充一下,以防万一。

这是未同步的Java方法中的Java代码的同步块

public void add(int value){

synchronized(this){

this.count += value;

}

}

在示例“ this”中,使用了add方法。同步实例方法将其所属的对象用作监视对象。

=>在同一监视对象上同步的Java代码块内只能执行一个线程。

aman answered 2019-09-24T08:14:13Z

2 votes

Java虚拟机使用监视器来支持多线程。 监视器通过两个概念实现这一点-运行线程时互斥(这里是“锁定”的地方)和作为线程间通信手段的协调(这里是对象的wait和notify方法的地方)。

从“ Inside JVM”中阅读以下部分将清除这个疑问,在这里是否很好解释(第20章,线程同步)-

[https://www.artima.com/insidejvm/ed2/threadsynchP.html]

adityalad answered 2019-09-24T08:14:53Z

2 votes

从Java虚拟机内部引用

Java虚拟机中的线程在到达时请求锁定   在监视区域的开头。 在Java中,有两种   监视区域:同步语句和同步方法。

监控

监视器就像一栋建筑物,其中包含一个可以   一次只能被一个线程占用。 房间通常包含   一些数据。 从线程进入这个房间的时间到它进入的时间   离开后,它可以独占访问房间中的任何数据。 进入   监视程序的建立称为“进入监视程序”。 进入   建筑物内的特殊房间称为“获取显示器”。   占领房间称为“拥有显示器”,然后离开房间   房间被称为“释放显示器”。 离开整个建筑是   称为“退出监视器”。

监视器除了与少量数据相关联之外,   与一个或多个代码位相关联,在本书中   称为监视区域。

如前所述,该语言提供了两种内置方法   识别程序中的监视区域:同步语句和   同步方法。 这两种机制,实现了相互   Java虚拟机支持同步的排除方面   机器的指令集。

为了实现监视器的互斥功能,Java   虚拟机将锁(有时称为互斥锁)与每个   对象和类。 锁就像特权,只有一个线程可以   随时“拥有”。

允许单个线程多次锁定同一对象。 对于   每个对象,Java虚拟机都会维护一个数量的计数   对象被锁定的次数。 解锁对象的数量为   零。 当线程首次获取锁时,计数为   再次增加到一。 每次线程获得对   同一对象,计数再次增加。

Zane XY answered 2019-09-24T08:16:16Z

java 监控对象是什么_多线程-Java中的对象监视器是什么意思? 为什么要使用这个词?...相关推荐

  1. 线程Java的两种方式_多线程(java和guava两种方式):

    1.Java 当要使用线程去执行一个任务时,可以使用ExecutorService.submit(new Callable); 这样可以不影响其他的业务的执行,但是在线程中的异常不能捕获到,也不能知道 ...

  2. 【源码+图片素材】Java王者荣耀游戏开发_开发Java游戏项目【王者荣耀】1天搞定!!!腾讯游戏_Java课程设计_Java实战项目_Java初级项目

    王者荣耀是当下热门手游之一,小伙伴们是否想过如何制作一款属于自己的王者荣耀游戏呢? 本课程讲解了一个王者荣耀游戏的详细编写流程,即使你是刚入门Java的新手,只要你简单掌握了该游戏所需要的JavaSE ...

  3. java线程的创建线程_多线程(Thread、线程创建、线程池)

    第1章 多线程 1.1 多线程介绍 学习多线程之前,我们先要了解几个关于多线程有关的概念. 进程:进程指正在运行的程序.确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序, ...

  4. java string改变的影响_为什么Java的string类要设成immutable(不可变的)

    最流行的Java面试题之一就是:什么是不可变对象(immutable object),不可变对象有什么好处,在什么情况下应该用,或者更具体一些,Java的String类为什么要设成immutable类 ...

  5. java 取栈顶元素_《Java实战之内存模型》详解篇

    内存是非常重要的系统资源,是硬盘和CPU的中间仓库及桥梁,承载着操作系统和应用程序的实时运行 JVM内存布局规定了Java在运行过程中内存申请.分配.管理的策略,保证了JVM的高效稳定运行 不同的JV ...

  6. java 多态判断非空_收藏Java 面试题全梳理

    脚本之家 你与百万开发者在一起 来源 | Java建设者(ID:javajianshe) 作者 |cxuan 如若转载请联系原公众号 Java 基础篇 Java 有哪些特点 并发性的:你可以在其中执行 ...

  7. java jsp取静态常量_获取java静态

    Android NDK开发系列教程4:对类变量进行操作 终于建了一个自己个人小站:https://huangtianyu.gitee.io,以后优先更新小站博客,欢迎进站,O(∩_∩)O~~ 通常我们 ...

  8. java课后习题及答案_《java基础入门》课后习题及答案.doc

    <java基础入门>课后习题及答案.doc <Java 基础入门>课后习题及答案博学谷--让 IT 教学更简单,让 IT 学习更有效<Java 基础入门> 课后习题 ...

  9. java字符串拆分成数组_用Java实现JVM第八章《数组和字符串》

    小傅哥 | https://bugstack.cn 沉淀.分享.成长,专注于原创专题案例,以最易学习编程的方式分享知识,让自己和他人都能有所收获.目前已完成的专题有:Netty4.x实战专题案例.用J ...

最新文章

  1. windows下svn server迁移
  2. CSS之未知高度多行文本垂直居中
  3. 树莓派wifi环境下初始化及环境配置
  4. 修改服务器404页面,服务器上的404页面做了有什么好处?
  5. zookeeper 常用命令示例
  6. PowerDesigner生成mysql字段comment 注释
  7. 一篇文章了解Liquid模版引擎
  8. 四、PHP基础——会话技术Cookie 和 Session
  9. Python开发-- Lesson 2--Python数据类型(2016/07/30)
  10. 好看的某云紫色渐变HTML网站源码
  11. 提示word损坏,需文本恢复转换器的解决两方法
  12. 【华为云技术分享】云小课 | SAP S/4HANA高可用之实战演练
  13. property属性[Python]
  14. 富士康员工涉嫌盗卖 iPhone 零件遭调查;风行网接手暴风;IntelliJ IDEA 2019.3.1 发布| 极客头条...
  15. 【OpenCV】用sobel算子和Susan算子提取恩智浦智能车赛道边缘
  16. 瀑布模型快速原型模型
  17. C++设计模式概念与设计模式描述语言(UML)
  18. 外星人安装MSDN原版系统一键还原Alienware OEM logo
  19. 正确重启计算机的方法,电脑一开机就会出现 重启并选择正确的启动设备或在选定的启动设...
  20. vim command

热门文章

  1. Python 中 3 个不可思议的返回
  2. 自己专属的Ubuntu系统伪装Mac
  3. eclipse怎样创建并运行java项目
  4. table标签+css代码实现选项卡效果(用)
  5. 转帖:免费申请样片的公司大全!!
  6. inner join,left join,right join 三者的用法
  7. PRML-系列一之1.5.1~1.5.3
  8. virtualbox android分辨率,VirtualBox 修改Android x86虚拟机的分辨率
  9. mysqld.exe已停止工作_win7一直弹出DrUpdate.exe已经停止工作的解决方法
  10. leetcode—— 401. 二进制手表(使用到将数字转换为字符)