Java监视器-同步基本概念
来源:互联网 发布:安卓软件破解 编辑:程序博客网 时间:2024/05/23 01:11
1.什么是监视器
监视器可以看做是经过特殊布置的建筑,这个建筑有一个特殊的房间,该房间通常包含一些数据和代码,但是一次只能一个消费者(thread)使用此房间,
当一个消费者(线程)使用了这个房间,首先他必须到一个大厅(Entry Set)等待,调度程序将基于某些标准(e.g. FIFO)将从大厅中选择一个消费者(线程),进入特殊房间,如果这个线程因为某些原因被“挂起”,它将被调度程序安排到“等待房间”,并且一段时间之后会被重新分配到特殊房间,按照上面的线路,这个建筑物包含三个房间,分别是“特殊房间”、“大厅”以及“等待房间”。
简单来说,监视器用来监视线程进入这个特别房间,他确保同一时间只能有一个线程可以访问特殊房间中的数据和代码。
2.JAVA中监视器的实现
在JAVA虚拟机中,每个对象(Object和class)通过某种逻辑关联监视器,为了实现监视器的互斥功能,每个对象(Object和class)都关联着一个锁(有时也叫“互斥量”),这个锁在操作系统书籍中称为“信号量”,互斥(“mutex “)是一个二进制的信号量。
如果一个线程拥有了某些数据的锁,其他的线程则无法获得锁,直到这个线程释放了这个锁。在多线程中,如果任何时候都是我们自己来写这个信号量,显然不是很方便,幸运的是,JVM为我们自动实现了这些。
为了使数据不被多个线程访问,java 提供了同步块 以及 同步方法两种实现,一旦一段代码被嵌入到一个synchronized关键字中,意味着放入了监视区域,JVM在后台会自动为这段代码实现锁的功能。
3.JAVA的同步代码中,哪一部分是监视器?
我们知道JAVA每个对象(Object/class) 都关联一个监视器,更好的说法应该是每个对象(Object/class)都有一个监视器,对象可以有它自己的临界区,并且能够监视线程序列为了使线程协作,JAVA为提供了wait()和notifyAll以及notify()实现挂起线程,并且唤醒另外一个等待的线程,此外这些方法有三种不同版本:
wait(long timeout, int nanos)
wait(long timeout) notified by other threads or notified by timeout.
notify(all)
这些方法只能在一个同步块或同步方法中被调用,原因是,如果一个方法不需要相互排斥,不需要监测或线程之间协作,每一个线程可以自由访问此方法,那就不需要协作。
- Java监视器-同步基本概念
- 监视器–JAVA同步基本概念
- JAVA同步监视器–基本概念
- 监视器–JAVA同步基本概念
- [疯狂Java]线程同步:同步监视器、同步方法、同步锁、死锁
- Java线程同步使用的“监视器”和“对象锁"
- java-监视器
- java监视器
- java并发基础(二)--- Java监视器模型、并发容器、同步工具类(闭锁、信号量)
- 线程同步---释放同步监视器的锁定
- JAVA——多线程编程之同步“监视器monitor”(三)
- java中线程同步Synchronized,监视器monitor和锁lock的关系是什
- Java 同步监视器中的 wait() 和 notify() 方法的具体实现
- java----内置监视器
- 同步监视器之同步代码块、同步方法
- 同步监视器锁定的释放问题
- Java线程:基本概念、可见性与同步
- Java线程常见概念——基本概念、可见性、同步
- 在谷歌浏览器中安装charset.crx离线Chrome插件,修改编码用
- EXCEL数据类型
- ios 加载本地网页 css js 无法显示问题
- windows 启动停止 java进程
- 2-SAT
- Java监视器-同步基本概念
- CF510B:Fox And Two Dots(dfs)
- Qt之图片自适应QLabel的大小
- Mac 系统中android studio将module打包成jar
- 安装beautifulsoup库时遇到 ImportError: No module named bs4 错误的解决方法
- ZXing二维码编解码的使用
- 基于swagger phpunit打造全自动化php单元测试
- 怎么用html 显示出一横的多出来的文字,怎么实现CSS限制字数,超出部份显示点点点.
- vue-router动态利用配置内容