快速业务通道

关于解决Java编程语言线程问题的建议 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-20
个 active 对象以一种更为过程化的模型可以消除大多数的同步问题。

在某种意义上,Java 编程语言的整个 Swing/AWT 子系统是一个 active 对象。向一个 Swing 队列传送一条讯息的唯一安全的途径是,调用一个类似 SwingUtilities.invokeLater() 的方法,这样就在 Swing 事件队列上发送了一个 runnable 对象,当轮到它执行时, Swing 事件处理线程将会处理它。

那么我的第一个建议是,向 Java 编程语言中加入一个 task (任务)的概念,从而将active 对象集成到语言中。( task的概念是从 Intel 的 RMX 操作系统和 Ada 编程语言借鉴过来的。大多数实时操作系统都支持类似的概念。)

关于解决Java编程语言线程问题的建议(2)

时间:2011-01-24 Allen Holub

一个任务有一个内置的 active 对象分发程序,并自动管理那些处理异步信息的全部机制。

定义一个任务和定义一个类基本相同,不同的只是需要在任务的方法前加一个 asynchronous 修饰符来指示 active 对象的分配程序在后台处理这些方法。请参考我的书中第九章的基于类方法,再看以下的 file_io 类,它使用了在《 Taming Java Threads 》中所讨论的 Active_object 类来实现异步写操作:

interface Exception_handler     {  void handle_exception( Throwable e ); }     class File_io_task {  Active_object dispatcher = new Active_object();     final OutputStream   file;     final Exception_handler handler;     File_io_task( String file_name, Exception_handler handler )                         throws IOException     {  file = new FileOutputStream( file_name );       this.handler = handler;     }     public void write( final byte[] bytes ) {       // The following call asks the active-object dispatcher       // to enqueue the Runnable object on its request       // queue. A thread associated with the active object       // dequeues the runnable objects and executes them       // one at a time.       dispatcher.dispatch       (  new Runnable()     {  public void run() {             try             {  byte[] copy new byte[ bytes.length ];               System.arrayCopy(  bytes, 0,                         copy,  0,                         bytes.length );               file.write( copy );             }             catch( Throwable problem )             {  handler.handle_exception( problem );             }           }         }       );     }   }

所有的写请求都用一个 dispatch() 过程调用被放在 active-object 的输入队列中排队。在后台处理这些异步信息时出现的任何异常 (exception) 都由 Exception_handler 对象处理,此 Exception_handler 对象被传送到 File_io_task 的构造函数中。您要写内容到文件时,代码如下:

File_io_task io =  new File_io_task              ( "foo.txt"                new Exception_handler      {  public void handle( Throwable e ) {  e.printStackTrace();                  }                }              );   

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