关于我们 』『 人才招聘 』『 学校地图 』『 NCIE介绍 』
首 页 | 新闻中心 | 课程详解 | 教学模式 | 师资团队 | 教学园地 | 就业专栏 | 在线报名 | 技术专栏 | 留言反馈 | 学员博客
咨询电话:028-86615118 ┆ 24小时咨询电话:13438098376 ┆ 就业服务:13438098376 ┆ 咨询群:35540887 ┆ 联系我们公交线路查询
课程推荐
在线咨询
咨询群: 35540887
杨老师: 我是杨老师,咨询请点这里
韩老师: 我是韩老师,咨询请点这里
最新开班信息
成都软件开发学习班
最新免费活动
学员交流
朗沃新闻
 

编写高效的线程安全类

录入时间:07-04-07 10:32:32  责任编辑:admin
种方法(称为轮询)中,系统定期确定这一状态并据此作出反映。这种方法(虽然简单)也效率不高,因为您始终无法预知何时需要调用它。

第二种方法(称为事件驱动处理)效率较高,但实现起来也较为复杂。在事件驱动处理的情况下,需要一种发信机制来控制某一特定线程何时应该运行。在 Java 程序中,您可以使用 wait()、notify() 和 notifyAll() 方法向线程发送信号。这些方法允许线程在一个对象上阻塞,直到所需的条件得到满足为止,然后再次开始运行。这种设计减少了 CPU 占用,因为线程在阻塞时不消耗执行时间,并且可在 notify() 方法被调用时立即唤醒。与轮询相比,事件驱动方法可以提供更短的响应时间。

创建高效的线程安全类的步骤

编写线程安全类的最简单的方法是用 synchronized 声明每个方法。虽然这种方案可以消除数据损坏,但它同时也会消除您预期从多线程获得的任何收益。这样,您就需要分析并确保在 synchronized 块内部仅占用最少的执行时间。您必须格外关注访问缓慢资源 — 文件、目录、网络套接字和数据库 — 的方法,这些方法可能降低您的程序的效率。尽量将对这类资源的访问放在一个单独的线程中,最好在任何 synchronized 代码之外。

一个线程安全类的示例被设计为要处理的文件的中心储存库。它与使用 getWork() 和 finishWork() 与 WorkTable 类对接的一组线程一起工作。本例旨在让您体验一下全功能的线程安全类,该类使用了 helper 线程和混合同步。请注意继续添加要处理的新文件的Refresher helper 线程的用法。本例没有调整到最佳性能,很明显有许多地方可以改写以改善性能,比如将 Refresher 线程改为使用 wait()/notify() 方法事件驱动的,改写 populateTable() 方法以减少列出磁盘上的文件(这是高成本的操作)所产生的影响。

小结

通过使用可用的全部语言支持,Java 程序中的多线程编程相当简单。但是,使线程安全类具有较高的效率仍然比较困难。为了改善性能,您必须事先考虑并谨慎使用锁定功能。

参考资料

请阅读 Scott Oaks 和 Henry Wong 所著的《Java Threads》(由 O'Reilly Associates 出版),以了解如何充分利用 Java 的线程功能。
查看 Java 2 平台,标准版,版本 1.2.2 的 API 规范

9 7 3 1 2 4 8 :
〖友情连接〗

成都知道 朗沃教育(重庆天熙) 中国国学网 四川行业通 J2ME世界
Sun 中国程序员社区 成都博科购书网 人事部信产部653工程 国家信息产业部NCIE

杨老师:
韩老师:
李老师:
何老师:
欧阳老师: