快速业务通道

使用实时Java进行开发,第1部分 探索实时Java的独特功能 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-20
 AsyncEvent();       event.addHandler(handler);       int handlerPriority =         ((PriorityParameters) handler.getSchedulingParameters()).getPriority();       RealtimeThread.currentRealtimeThread().setPriority(handlerPriority - 1);       thread.start();       waitForConsumer(consumer);       //fire several events while there is a consumer       event.fire();       event.fire();       event.fire();       waitForEvent(producer, 3);       setConsuming(thread, false);       //fire a couple of events while there is no consumer       event.fire();       event.fire();       waitForEvent(producer, 5);       setConsuming(thread, true);       waitForConsumer(consumer);       //fire another event while there is a consumer       event.fire();       waitForEvent(producer, 6);       synchronized(thread) {         thread.terminate = true;         setConsuming(thread, false);       }     } catch(InterruptedException e) {}   }   private void setConsuming(NoHeapThread thread, boolean enabled) {     synchronized(thread) {       thread.consumer.setConsuming = enabled;       thread.notify();     }   }   private void waitForEvent(Producer producer, int eventNumber)       throws InterruptedException {     while(producer.eventIdentifier < eventNumber) {       Thread.sleep(100);     }   }   private void waitForConsumer(Consumer consumer)       throws InterruptedException {     while(!consumer.isConsuming) {       Thread.sleep(100);     }   } }

使用实时Java进行开发,第1部分 探索实时Java的独特功能(11)

时间:2011-01-27 IBM Sean C. Foley

在 清单 7 中,两个范围被用作非堆线程和处理器的范围堆栈,使用两个范围是因为这些 Schedulable 不能访问由堆分配的任何对象。异步事件对象代表事件,具有在触发事件时为其分派的附加处理器。初始化系统之后,代码启动使用者线程并多次触发事件,在比事件处理器更低的优先级上运行。这段代码还会在触发附加线程时打开和关闭使用者线程。

清单 8 给出了在实时 JVM 中运行 EventSystem 时的输出:

清单 8. 控制台输出

1 2 3 6 

本示例有一个有趣之处,那就是为什么没有报告事件 4 和 5。监听线程每次报告队列中的事件时,它会从队列前端开始,到队列末尾结束,这意味着所有 6 个事件至少被报告一次。

但是,代码的设计可确保用于存储事件的内存在没有被任何线程使用时将自动被释放。当使用者线程停止读取队列时,它将退出范围内存区域,这时没有任何 Schedulable 对象将该区域用作分配上下文。

使用区域的 Schedulable 对象的缺少意味着范围区域中的对象已被清除,范围区域已被重置。这包括门户对象,所以当线程停止监听时,队列和其中的所有事件都会被释放。每次触发后续事件时,都会重新创建和填充队列,但是如果没有监听线程,内存就会被立即释放。

内存管理是自动执行的,它的运行不会受到垃圾收集器的干扰,无论收集器是否是活动的(因为处理器和线程都与堆没有关系)。各个事件在内存中存储为一个对象队列,如

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号