首页 考试吧论坛 Exam8视线 考试商城 网络课程 模拟考试 考友录 实用文档 缤纷校园 英语学习
2010考研 | 自学考试 | 成人高考 | 专 升 本 | 法律硕士 | MBA/MPA | 中 科 院
四六级 | 商务英语 | 公共英语 | 职称日语 | 职称英语 | 博思 | 口译笔译 | GRE GMAT | 日语 | 托福
雅思 | 专四专八 | 新概念 | 自考英语 | 零起点英韩语 | 在职申硕英语
在职攻硕英语 | 成人英语三级
等级考试 | 水平考试 | 微软认证 | 思科认证 | Oracle认证 | Linux认证
公务员 | 报关员 | 报检员 | 外销员 | 司法考试 | 导游考试 | 教师资格 | 国际商务师 | 跟单员
单证员 | 物流师 | 价格鉴证师 | 银行从业资格 | 证券从业资格 | 人力资源管理师 | 管理咨询师
期货从业资格 | 社会工作者
会计职称 | 注会CPA | 经济师 | 统计师 | 注册税务师 | 评估师 | 精算师 | 高会 | ACCA | 审计师
法律顾问 | 会计证
一级建造师 | 二级建造师 | 造价师 | 监理师 | 安全师 | 咨询师 | 结构师 | 建筑师 | 安全评价师
房地产估价师 | 土地估价师 | 设备监理师 | 岩土工程师 | 质量资格 | 房地产经纪人 | 造价员
投资项目管理 | 土地代理人 | 环保师 | 环境影响评价 | 物业管理师 | 城市规划师 | 公路监理师
公路造价工程师 | 招标师
执业护士 | 执业医师 | 执业药师 | 卫生资格
您现在的位置: 考试吧(Exam8.com) > 软件水平考试 > 系统分析师 > 正文

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

 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平台中线程之间互斥与同步的转换模型。

转帖于:软件水平考试_考试吧
文章搜索
多线程支持和线程安全(2)网友评论网友评论
版权声明 --------------------------------------------------------------------------------------
    如果软件水平考试网所转载内容不慎侵犯了您的权益,请与我们联系,我们将会及时处理。如转载本软件水平考试网内容,请注明出处。
 gaoxiaoliang