java 异步消息处理

java 异步消息处理

ID:26710813

大小:56.50 KB

页数:10页

时间:2018-11-28

java 异步消息处理_第1页
java 异步消息处理_第2页
java 异步消息处理_第3页
java 异步消息处理_第4页
java 异步消息处理_第5页
资源描述:

《java 异步消息处理》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Java异步消息处理一.它要能适应不同类型的请求:本节用makeString来说明要求有返回值的请求.用displayString来说明不需要返回值的请求.二.要能同时并发处理多个请求,并能按一定机制调度:本节将用一个队列来存放请求,所以只能按FIFO机制调度,你可以改用LinkedList,就可以简单实现一个优先级(优先级高的addFirst,低的addLast).三.有能力将调用的边界从线程扩展到机器间(RMI)四.分离过度耦合,如分离调用句柄(取货凭证)和真实数据的实现.分离调用和执行的过程,可以尽快地将调返回.现在看具体的实现:publicinter

2、faceAxman{ResultresultTest(intcount,charc);voidnoResultTest(Stringstr);}这个接口有两个方法要实现,就是有返回值的调用resultTest和不需要返回值的调用noResultTest,我们把这个接口用一个代理类来实现,目的是将方法调用转化为对象,这样就可以将多个请求(多个方法调)放到一个容器中缓存起来,然后统一处理,因为Java不支持方法指针,所以把方法调用转换为对象,然后在这个对象上统一执行它们的方法,不仅可以做到异步处理,而且可以将代表方法调用的请求对象序列化后通过网络传递到另一个机器

3、上执行(RMI).这也是Java回调机制最有力的实现.一个简单的例子.如果1:做A如果2:做B如果3:做C如果有1000个情况,你不至于用1000个case吧?以后再增加呢?所以如果C/C++程序员,会这样实现:(c和c++定义结构不同)typedefinestructMyStruct{intmark;(*fn)();}MyList;然后你可以声明这个结构数据:{1,A,2,B3,C}做一个循环:for(i=0;i

4、来,然后去访问,调用,而Java中,我们无法将一个方法保存,除了直接调用,所以将要调用的方法用子类来实现,然后把这些子类实例保存起来,然后在这些子类的实现上调用方法:interfaceMy{voidtest();}classAimplementsMy{publicvoidtest(){System.out.println(“A”):}}classBimplementsMy{publicvoidtest(){System.out.println(“B”):}}classCimplementsMy{publicvoidtest(){System.out.prin

5、tln(“C”):}}classMyStruct{intmark;Mym;publicMyStruct(intmark,Mym){this.mark=amrk;this.m=m}}数组:{newMyStruct(1,newA()),newMyStruct(2,newB()),newMyStruct(3,newC())}for(xxxxxxxxx)if(参数==数组[i].mark)数组[i].m.test();这样把要调用的方法转换为对象的保程不仅仅是可以对要调用的方法进行调度,而且可以把对象序列化后在另一台机器上执行,这样就把调用边界从线程扩展到了机器.回

6、到我们的例子:classProxyimplementsAxman{privatefinalSchedulerscheduler;privatefinalServantservant;publicProxy(Schedulerscheduler,Servantservant){this.scheduler=scheduler;this.servant=servant;}publicResultresultTest(intcount,charc){FutureResultfutrue=newFutureResult();this.scheduler.invoke

7、(newResultRequest(servant,futrue,count,c));returnfutrue;}publicvoidnoResultTest(Stringstr){this.scheduler.invoke(newNoResultRequest(this.servant,str));}}其中scheduler是管理对调用的调度,servant是真正的对方法的执行:Servant就是去真实地实现方法:classServantimplementsAxman{publicResultresultTest(intcount,charc){char[

8、]buf=newchar[count];for(in

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。