java多线程——监视锁(monitor)
来源:互联网 发布:网络名誉侵权案例分析 编辑:程序博客网 时间:2024/05/19 18:45
java中每个对象都有唯一的一个monitor,想拥有一个对象的monitor的话有以下三种方式:
1.执行该对象的同步方法
public synchronize a () {}
2.执行该对象的同步块
synchronize(obj) {}
3.执行某个类的静态同步方法
public static synchronize b(){}
tips:拥有monitor的是线程
1.同时只能有一个线程可以获取某个对象的monitor
2.一个线程通过调用某个对象的wait()方法释放该对象的monitor并进入休眠状态,
直到其他线程调用该对象的notify()或者notifyAll()再次获取该对象的monitor
3.只有拥有该对象monitor的线程才可以调用该对象的notify()和notifyAll()方法
如果没有该对象monitor的线程调用了该对象的notify()或者notifyAll()方法将会抛出java.lang.IllegalMonitorStateException
测试代码:
public class TestNotify implements Runnable { private final Object obj = new Object(); @Override public void run() { synchronized (obj) { notify(); //obj.notify(); } } public static void main(String[] args) { ShareVars shareVars = new ShareVars(); new Thread(new Notify2()).start(); }}
当调用notify()时会抛出异常
状态分析:
1.可以看到,此时线程执行的同步块为synchronized(obj),即只获得了obj的monitir
2.notify()是调用TestNotify的方法,当前线程并未达到拥有TestNotify对象monitor的三个条件之一
3.所以抛出java.lang.IllegalMonitorStateException
wait()方法也和notify()一样有相同的限制:
@Override public void run() { synchronized (obj) { try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } } }修改run方法为上述代码也会抛出java.lang.IllegalMonitorStateException
0 0
- java多线程——监视锁(monitor)
- 多线程----监视锁(monitor)
- 多线程同步之——monitor
- JAVA——多线程编程之同步“监视器monitor”(三)
- 监视锁——Java同步的基本思想
- 多线程系列(八)——管程类(Monitor类)
- Java多线程--Monitor对象(一)
- Java多线程--Monitor对象(二)
- 系统安全监视 System Safety Monitor
- c#初学-多线程中lock Monitor锁
- 使用TCP-IP Monitor监视Soap协议
- 使用TCP-IP Monitor监视Soap协议
- java monitor
- Java monitor
- 多线程同步与并发访问共享资源工具—Lock、Monitor、Mutex、Semaphore
- java多线程—–锁
- Process Monitor-无法驾驭的免费高级进程监视工具
- wince 6.0下使用Performance monitor监视内存
- jar4
- A. Watchmen
- Android中管理多个Fragment的最佳实践,完美解决保存状态与重影问题(转)
- Number Triangle
- java中的容器collection及其常用的子接口
- java多线程——监视锁(monitor)
- HDU 1232
- Java文件上传的两种方式
- 欢迎使用CSDN-markdown编辑器
- android6.0的SDK不能使用httpClient解决方法
- Java千百问_03基本语法(004)_java中的运算符都有哪些
- HDU 5117 Fluorescent
- NYOJ 123士兵杀敌(四)【树状数组||区间树】
- 第五周项目三 时间类(2)