当前位置:首页 > 全部子站 > IT > 水平考试

多线程支持和线程安全(2)

来源:长理培训发布时间:2017-11-20 13:54:08

  JDK平台中自己实现了的一套更为完善的线程模型,因此它的这套线程模型是可能独立于,也有区别于操作系统实现的线程模型。如图10-58所示,它包含的状态有运行(Running)、就绪(Ready)、暂停(Suspended)、休眠(Sleeping)、阻塞(Blocked)以及监控状态(Monitor States)。这其中线程的运行状态、就绪状态、暂停状态、休眠状态以及阻塞状态都比较容易理解,另外有一个比较特殊的线程状态,也即监控状态,它表示线程正处于查询对象锁的管理状态下,稍后会继续深入阐述这一特殊的状态。 
  JDK平台中,线程之间的互斥控制非常易于实现,因为Java语言对它有很好的支持,也即通过语言关键字synchronized来定义一个互斥访问的临界区。关键字synchronized的使用非常灵活,它定义的临界区资源的颗粒度可大可小,例如可以声明某个类的某个方法是被互斥访问的临界区,也可以定义某个局部作用域为一个临界区,甚至可以直接锁定某个对象为临界区资源。

  而JDK平台中线程之间的同步控制,是通过wait()和notify()方法来实现的,实际上wait()方法的调用相当于执行P操作,而notify()方法的调用则相当于操作V,有关P,V操作的概念,请参阅操作系统中关于进程间的同步控制与通信设计等小节中的内容。另外为了提高安全性,JDK平台中还定义了一个notifyAll()的方法,它用于通知并释放所有处于阻塞等待状态中的线程,便于这些线程有机会重新获得退出的机会,避免了一些不必要的死锁。

  MFC中拥有一些专门实现线程间互斥和同步控制的对象,而与这形成鲜明对比的是,JDK平台中则没有提供这些类似的专有控制对象,这非常有意思,实际上JDK平台中的wait()和notify()方法是Object类(根基类)对象所提供的方法实现,所以说,程序中所有对象的运行实例都拥有wait()和notify()方法。并且它的同步与互斥有着非常紧密的联系,如图10-59所示,这是JDK平台中线程之间互斥与同步的转换模型。 

责编:罗莉

发表评论(共0条评论)
请自觉遵守互联网相关政策法规,评论内容只代表网友观点,发表审核后显示!

国家电网校园招聘考试直播课程通关班

  • 讲师:刘萍萍 / 谢楠
  • 课时:160h
  • 价格 4580

特色双名师解密新课程高频考点,送国家电网教材讲义,助力一次通关

配套通关班送国网在线题库一套

课程专业名称
讲师
课时
查看课程

国家电网招聘考试录播视频课程

  • 讲师:崔莹莹 / 刘萍萍
  • 课时:180h
  • 价格 3580

特色解密新课程高频考点,免费学习,助力一次通关

配套全套国网视频课程免费学习

课程专业名称
讲师
课时
查看课程
在线题库
面授课程更多>>
图书商城更多>>
在线报名
  • 报考专业:
    *(必填)
  • 姓名:
    *(必填)
  • 手机号码:
    *(必填)
返回顶部