快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-20
//...    io.write( some_bytes );

这种基于类的处理方法,其主要问题是太复杂了 -- 对于一个这样简单的操作,代码太杂了。向 Java 语言引入 $task 和 $asynchronous 关键字后,就可以按下面这样重写以前的代码:

$task File_io $error{ $.printStackTrace(); }    {      OutputStream file;      File_io( String file_name ) throws IOException      {  file = new FileOutputStream( file_name );      }      asynchronous public write( byte[] bytes )      {  file.write( bytes );      }    }

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

时间:2011-01-24 Allen Holub

注意,异步方法并没有指定返回值,因为其句柄将被立即返回,而不用等到请求的操作处理完成后。所以,此时没有合理的返回值。对于派生出的模型, $task 关键字和 class 一样同效: $task 可以实现接口、继承类和继承的其它任务。标有 asynchronous 关键字的方法由 $task 在后台处理。其它的方法将同步运行,就像在类中一样。

$task 关键字可以用一个可选的 $error 从句修饰 (如上所示),它表明对任何无法被异步方法本身捕捉的异常将有一个缺省的处理程序。我使用 $ 来代表被抛出的异常对象。如果没有指定 $error 从句,就将打印出一个合理的出错信息(很可能是堆栈跟踪信息)。

注意,为确保线程安全,异步方法的参数必须是不变 (immutable) 的。运行时系统应通过相关语义来保证这种不变性(简单的复制通常是不够的)。

所有的 task 对象必须支持一些伪信息 (pseudo-message),例如:

some_task.close() 在此调用后发送的任何异步信息都产生一个 TaskClosedException 。但是,在 active 对象队列上等候的消息仍能被提供。
some_task.join() 调用程序被阻断,直到此任务关闭、而且所有未完成的请求都被处理完毕。

除了常用的修饰符( public 等), task 关键字还应接受一个 $pooled(n) 修饰符,它导致 task 使用一个线程池,而不是使用单个线程来运行异步请求。 n 指定了所需线程池的大小;必要时,此线程池可以增加,但是当不再需要线程时,它应该缩到原来的大小。伪域 (pseudo-field) $pool_size 返回在 $pooled(n) 中指定的原始 n 参数值。

在《 Taming Java Threads 》的第八章中,我给出了一个服务器端的 socket 处理程序,作为线程池的例子。它是关于使用线程池的任务的一个好例子。其基本思路是产生一个独立对象,它的任务是监控一个服务器端的 socket。每当一个客户机连接到服务器时,服务器端的对象会从池中抓取一个预先创建的睡眠线程,并把此线程设置为服务于客户端连接。socket 服务器会产出一个额外的客户服务线程,但是当连接关闭时,这些额外的线程将被删除。实现 socket 服务器的推荐语法如下:

public $pooled(10) $task Client_handler {      PrintWriter log = new PrintWriter( System.out );      public asynchronous void handle( Socket connection_to_the_client ) {        log.println("writing");        // client-handling code goes here. Every call to        // handle() is executed on its own thread, but 10        // threads are pre-created for this purpose. Additional        // threads are created on an as-needed basis, but are        // discarded when handle() returns.      }    }    $task Socket_server    {      ServerSocket server;      Client_

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