监视器
java监视器支持两种线程:互斥和协作。
java虚拟机通过对象锁来实现互斥,允许多个线程在同一个共享数据上独 立而不干扰地工作。
协作则通过object类的wait方法和notify方法来实现,允许多个线程为了同一个目标而共同工作。
我们将监视器比作一个建筑物,里面有很多房间,房间里面有一些数据,并且同一个时间只能被一个线程占据。一个线程进入房间到离开为止,独占其中全部的数据。
进入这个数据叫做进入监视器。
进入房间叫做获得监视器。
占据房间叫做持有监视器。
离开房间叫做释放监视器。
离开建筑叫做退出监视器。
互斥原理
对一个监视器来说监视区域是最小的,不可分割的代码块。同一个监视器中,监视区域只会被一个线程执行。
当一个线程到达了一个监视区域的开始处,它就会放置到监视器的入口区。如果没有其他线程等待,它就会进入监视器并且获得监视器,当执行完监视区域的代码后,就会释放并退出监视器。
如果当前监视器正在被另外一个线程持有,那么它就会进入一个等待队列(如果有其他线程也在等待进入监视器)。当持有线程退出之后,只能有等待队列中的一个线程进入并持有该监视器,其他的线程仍旧留会在等待队列中。
协作原理
当一个线程需要一些特别的数据,而由另一个线程负责改变这些数据的状态时,同步显得特别重要。
eg,一个读线程会由一个缓冲区中读取数据,而当前这个缓存区是空的,就需要一个写线程写入数据,当写数据完成写入,读线程才能做读取操作。
java虚拟机使用的这种监视器叫做等待并唤醒监视器。
这种监视器中,一个已经持有该监视器的线程,可以通过调用等待命令,暂停自身的执行。当这个线程执行等待命令后,就会释放该监视器并进入一个等待区,并会一直在那里持续等待状态,直到一段时间后该监视器内的其他线程调用了唤醒命令。当一个线程调用唤醒命令后,它会持续持有监视器,直到它主动释放监视器。当执行了唤醒命令或者执行完监视区域,释放监视器后,等待线程会苏醒,其中的一个会重新获得监视器,判断状态条件,以便决定是否继续继续进入等待状态或者退出或者执行监视区域。
分享到:
- 2009-01-05 21:53
- 浏览 1476
- 评论(0)
- 论坛回复 / 浏览 (0 / 2150)
- 查看更多
相关推荐
vc++ 多线程教程---线程通信--利用事件对象,线程同步--使用信号量,线程同步--使用互斥量,线程同步--使用临界区
操作系统实验 多线程同步与互斥 java编写 可动态创建
g: 利用互斥量来解决线程同步互斥问题 h: problem1 生产者消费者问题 (1生产者 1消费者 1缓冲区) problem1 more 生产者消费者问题 (1生产者 2消费者 4缓冲区) problem2 读者与写着问题 I: 信号量 semaphore ...
本代码是用JAVA实现的生产者与消费者的问题,线程间的同步与互斥功能
解决多线程编程中的同步互斥问题
java ATM存取一体机(线程同步互斥) java ATM存取一体机(线程同步互斥)
多线程学习--各大软件都须要用到多线程。很经典的算法,很简单的实现容易看懂
(1) 通过编写程序实现进程同步和互斥,掌握有关进程(线程)同步与互斥的原理,以及解决进程(线程)同步和互斥的算法,从而进一步巩固进程(线程)同步和互斥等有关的内容。 (2) 了解Windows2000/XP中多线程的...
小实验三:根据同步机制的Peterson软件解决方案尝试自己编程实现线程同步机制和用于上述线程并发问题的解决,并基于程序运行时间长短将其与基于Windows互斥信号量的线程同步机制的效率展开比较。 实验要求:线程主体...
QT6之多线程控制-互斥量和信号量
在linux上分别用多进程和多线程实现的同步互斥操作(源代码)
摘要:Java源码,系统相关,线程同步,线程互斥 Java线程间同步互斥,在实际的编程中,经常要处理线程间的同步互斥问题。Java 语言内在强大的多线程支持使得处理这类问题变得相对来说比较简单。本例将模仿经典的线程...
多线程并发编程-同步与互斥-原⼦变量-并发和⽆锁 数据结构
在Windows等操作系统下,使用的VC、VB、java或C等编程语言,采用进程(线程)同步和互斥的技术编写程序实现生产者-消费者问题或哲学家进餐问题或读者-写者问题或自己设计一个简单进程(线程)同步和互斥的实际问题。
windows多线程的同步和互斥
用java实现多线程并发中的读者与写者问题,能够实现多线程对临界资源的同步有序访问。 具体实现为: 给定一个队列A[1-10][1-100000]、元素编号1-10,其中每个元素包含10万个随机数。创建若干个线程,各循环100次;...
进程,线程同步互斥的控制方法,详细介绍,个人总结,面试常问
C#的多线程同步,C#中四种进程或线程同步互斥的控制方法
Java实现的进程同步与互斥(PV) Hao语言