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

© 进击的大鹏 中级黑马   /  2014-9-15 21:51  /  1015 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1.        线程通信中的方法wait,notify为什么写在Object类中
  锁有关系,同步中的锁是一个对象,而是什么对象,不确定的,因此方法写在了顶层的父类中,无论哪一个对象作为锁,都可以使用线程的方法
2.        wait方法和sleep方法有什么区别
  Thread类的静态方法sleep 无论线程休眠多长时间,线程不丢失对象监视器,不放锁
  wait方法,线程将发布对象监视器,释放锁,被唤醒后,从新获取锁后,才能运行。

3.        多线程的通信,多生产者和多消费者案例
  有一个产品,生产一个,消费一个,生产者4线程,消费者4个线程
  notify唤醒线程的时候,往往是最先等待的线程
  线程从哪里等待,从哪里唤醒,也不能立即执行,进行标记的判断,如果标记允许生产,才能生产,允许消费才能消费
        保证能够唤醒对方的线程   全部唤醒notifyAll
        唤醒后,继续进行标记的判断 循环结构,线程继续判断标记
  导致资源的严重浪费
  唤醒了全部线程,浪费资源的
  唤醒了本方线程,没有任何意义
  做到唤醒对方中的一个呢?在JDK1.4版本之前,做不到
  1.5版本之后,可以实现唤醒对方的一个线程

4.        在1.5版本的时候,出现了一个新的锁
   新的锁,替换现在的同步机制 java.util.concurrent.locks包中,Lock接口
   Lock接口,替换的同步,更加广泛和灵活的锁定操作
   接口中的方法,lock()获取锁  unlock() 释放锁
   synchronize(this){ == 获取锁

   } == 释放锁
  找子类 ReentrantLock 接口指向实现类的方式

  既然同步没有了,this锁也就不存在了,替代品 java.util.concurrent.locks.Condition接口
  Condition接口中的方法
   await() == wait()
   signal() == nofify()
   signalAll() == notifyAll()
实现唤醒对方的一个线程,实现步骤:
        导包
        获取锁对象,Lock接口的实现类对象ReentrantLock
        Lock接口中的方法lock()  unlock()替换同步机制
        获取Condition对象,对线程进行分组管理,使用Lock接口中的方法new Condition获取接口的实现类对象
        利用Condition对象中的方法await signal实现等待与唤醒

评分

参与人数 1技术分 +1 收起 理由
The_king丶 + 1 很给力!

查看全部评分

1 个回复

倒序浏览
谢谢楼主分享
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马