快速业务通道

实时Java,第3部分 - 线程化和同步 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16
锁定主要是无争用的。无争用锁定同样被认为是 RT 应用程序中的主要类型,特别是现有组件或库需要重用的时候。如果已知锁定是无争用的但是难以避免或删除同步指令,则对这些锁定花费一点小的确定的开销不失为明智的做法。

如前所述,无争用锁定操作涉及了一些设置和一个原子机器指令。解锁操作涉及一个原子机器指令。锁定操作的设置涉及分配一个预先锁定的互斥锁。该分配被认为是无争用锁定操作中最大的可变开销。RealtimeSystem.setMaximumConcurrentLocks() 可以帮助控制这种可变开销。

RealtimeSystem.setMaximumConcurrentLocks(int numLocks) 使 WebSphere Real Time 中的 VM 将 numLocks 互斥锁预先分配给全局锁缓存。全局锁缓存将其内容提供给单线程锁缓存。通过使用这个 RealTimeSystem API,可以降低具有严格时间要求的代码区域中发生锁定初始化的机率。RealTimeSystem.getMaximumConcurrentLocks() 可以用来帮助决定 setMaximumConcurentLocks() 调用中应该使用的数量,但是要注意 getMaximumConcurrentLocks() 提供关于调用的锁使用,而不是最高使用标记(high-water mark)。未来的 RTSJ 版本可能提供 API 以便提供最高使用标记。不要为 numLocks 的值提供很大的值,因为调用 setMaximimConcurrentLocks() 可能耗费过量的时间和内存来创建那些锁。还要注意:这个 API 是定义为 JVM 专用的,因此其他 JVM 可能忽略该调用或提供不同的行为。

争用锁定的性能

一个线程可以同时持有多个锁,并且可能已经按某种顺序获得了这些锁。所有此类锁定模式形成了一个锁层次结构。优先级继承可以指提高和降低一组线程的优先级。组中线程的数量应该不大于系统中最深的锁层次结构的深度。通过保持较浅的锁层次结构,可以锁定最少量的对象,您能够影响最大量的需要调整优先级的线程。

同步操作中的时间

Object.wait(long timeout, int nanos) 为相关的等待操作提供纳秒粒度。HighResolutionTime.waitForObject() API 与 Object.wait() 类似并提供可使用纳秒粒度指定的相对时间和绝对时间。在 WebSphere Real Time 中,这两个 API 都使用底层 POSIX 锁定等待服务来实现。这些底层服务最多提供微秒粒度。如有需要,出于可移植性目的,javax.realtime 包的 Clock 类的 getResolution() 方法应用于检索执行平台的分辨率。

结束语

RTSJ 通过 javax.realtime 包中的新 RT 类和 API 扩展并加强了 Java 编程人员的线程化和同步功能。在 WebSphere Real Time 中,这些功能通过 Linux 内核的 RT 版本来实现,对 POSIX 线程化进行修改并对 JVM 自身进行修改。您现在对 RTSJ 线程化和同步有了更深入的了解,这些知识可以帮助您在编写和部署 RT 应用程序时避免问题的发生。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号