A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© darkads 中级黑马   /  2014-9-21 19:54  /  644 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

实现线程的同步互斥有三种方法:
      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()来唤醒线程。




0 个回复

您需要登录后才可以回帖 登录 | 加入黑马