快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-20

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

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

综合示例

下一个示例演示了到目前为止介绍的一些实时特性。首先,清单 5 展示了两个类,它们分别是事件数据的生成者和使用者。两个类都是 Runnable 的实现,所以它们可以由任何给定 Schedulable 对象轻松执行。

清单 5. 事件对象的生成者和使用者类

class Producer implements Runnable {   volatile int eventIdentifier;   final Thread listener;   Producer(Thread listener) {     this.listener = listener;   }   public void run() {     LinkedList<Integer> events = getEvents();     synchronized(listener) {       listener.notify();       events.add(++eventIdentifier); //autoboxing creates an Integer object here      }   }   static LinkedList<Integer> getEvents() {     ScopedMemory memoryArea = (ScopedMemory) RealtimeThread.getCurrentMemoryArea();     LinkedList<Integer> events =       (LinkedList<Integer>) memoryArea.getPortal();     if(events == null) {       synchronized(memoryArea) {         if(events == null) {           events = new LinkedList<Integer>();           memoryArea.setPortal(events);         }       }     }     return events;   } } class Consumer implements Runnable {   boolean setConsuming = true;   volatile boolean isConsuming;   public void run() {     Thread currentThread = Thread.currentThread();     isConsuming = true;     try {       LinkedList<Integer> events = Producer.getEvents();       int lastEventConsumed = 0;       synchronized(currentThread) {         while(setConsuming) {           while(lastEventConsumed < events.size()) {             System.out.print(events.get(lastEventConsumed++) + " ");           }           currentThread.wait();         }       }     } catch(InterruptedException e) {     } finally {       isConsuming = false;     }   } }

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

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

在 清单 5 中,生成者和使用者对象访问一个事件队列,这些事件被编码为一系列 java.lang.Integer 对象。代码期望当前的分配上下文为一个范围内存区域,期望事件队列存储为范围的门户对象。(门户是从范围分配的对象,可以存储在范围内存区域对象自身之中。它非常方便有用,因为范围对象既不能存储在静态字段中,也不能存储在从父范围分配的对象中)。如果未找到队列,将创建该队列。使用两个可变字段来向所关注线程告知事件的生成和使用进度。

清单 6 中的两个类展示了如何执行 清单 5 中的代码:

清单 6. 可调度的类

class NoHeapHandler extends AsyncEventHandler {   final MemoryArea sharedArea;   final Producer producer;   NoHeapHandler(       PriorityScheduler scheduler,       ScopedMemory sharedArea,       Producer producer) {  

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