1. 监视器的含义
虚拟机为每一个对象和类都关联一个锁(又称为互斥体)。
锁住一个对象,就是获得对象关联的监视器。
一个线程可以允许对一个对象多次加锁(例如单例模式的双重加锁),前提是该对象持有对象锁。。
2. 两种监视区域:
同步方法和同步语句
3. Object类的方法对同步的支持
wait 与 notify
4. 过程描述
进入 入口区(即进入监视器的入口监视队列) public synchronized void method1() { 获得对象锁,持有监视器 。。。。。
。。。。。。
进入监视器的等候区,释放对象锁。 wait()
。。。。。。
唤醒等候区和进入区的对象(只是唤醒,代码继续向下执行) notifyall();
但是代码继续在该处向下执行 。。。。。。
继续执行直到离开监视器(即同步块的最后一条语句执行完毕) 。。。。。。。
}
监视器在被唤醒的在等候区和入口区的线程中选择一个线程,开始执行从上次中断的代码。
虚拟机为每一个对象和类都关联一个锁(又称为互斥体)。
锁住一个对象,就是获得对象关联的监视器。
一个线程可以允许对一个对象多次加锁(例如单例模式的双重加锁),前提是该对象持有对象锁。。
2. 两种监视区域:
同步方法和同步语句
3. Object类的方法对同步的支持
wait 与 notify
4. 过程描述
进入 入口区(即进入监视器的入口监视队列) public synchronized void method1() { 获得对象锁,持有监视器 。。。。。
。。。。。。
进入监视器的等候区,释放对象锁。 wait()
。。。。。。
唤醒等候区和进入区的对象(只是唤醒,代码继续向下执行) notifyall();
但是代码继续在该处向下执行 。。。。。。
继续执行直到离开监视器(即同步块的最后一条语句执行完毕) 。。。。。。。
}
监视器在被唤醒的在等候区和入口区的线程中选择一个线程,开始执行从上次中断的代码。