黑马程序员技术交流社区

标题: 关于 IllegalMonitorStateException一些要点 [打印本页]

作者: darkads    时间: 2014-9-21 19:54
标题: 关于 IllegalMonitorStateException一些要点
实现线程的同步互斥有三种方法:
      1)synchronized语句,可以将一个代码块或者方法同步。对应的等待、唤醒操作:对象.wait()、对象.notify()
      2)Lock类,面向对象的思想替换了synchronized,使用起来更加灵活。唤醒等待操作则要依赖Condition类,可以设置多个Condition
      3)信号灯Semaphore,多线程工具类,当设置信号数量为1时,请功能与lock类似。acquire()、release()实现了互斥,不提供线程等待、唤醒操作。

IllegalMontitorStateException是一个RuntimeException,是一个运行错误,表明当前线程没有拥有一个线程的监视器的锁,而调用对象上的wait()、notify()方法。所以在进行线程的等待唤醒操作时要注意:
      1)就是需要在调用wait()或者notify()之前,必须使用synchronized语义绑定住被wait/notify的对象,如果该对象有其他对象作为其成员变量,那么成员变量上可以调用wait()、notify()方法。
      2)Condition必须与Lock配合使用,也就是不能在synchronized代码块中使用condition.notify()来唤醒线程。









欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2