快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-20
handler client_handlers = new Client_handler();      public Socket_server( int port_number ) {  server = new ServerSocket(port_number);      }      public $asynchronous listen(Client_handler client) {        // This method is executed on its own thread.        while( true )        {  client_handlers.handle( server.accept() );        }      }    }    //...    Socket_server = new Socket_server( the_port_number );    server.listen()

Socket_server 对象使用一个独立的后台线程处理异步的 listen() 请求,它封装 socket 的“接受”循环。当每个客户端连接时, listen() 请求一个 Client_handler 通过调用 handle() 来处理请求。每个 handle() 请求在它们自己的线程中执行(因为这是一个 $pooled 任务)。

注意,每个传送到 $pooled $task 的异步消息实际上都使用它们自己的线程来处理。典型情况下,由于一个 $pooled $task 用于实现一个自主操作;所以对于解决与访问状态变量有关的潜在的同步问题,最好的解决方法是在 $asynchronous 方法中使用 this 是指向的对象的一个独有副本。这就是说,当向一个 $pooled $task 发送一个异步请求时,将执行一个 clone() 操作,并且此方法的 this 指针会指向此克隆对象。线程之间的通信可通过对 static 区的同步访问实现。

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

时间:2011-01-24 Allen Holub

改进 synchronized

虽然在多数情况下, $task 消除了同步操作的要求,但是不是所有的多线程系统都用任务来实现。所以,还需要改进现有的线程模块。 synchronized 关键字有下列缺点:

无法指定一个超时值。

无法中断一个正在等待请求锁的线程。

无法安全地请求多个锁 。(多个锁只能以依次序获得。)

解决这些问题的办法是:扩展 synchronized 的语法,使它支持多个参数和能接受一个超时说明(在下面的括弧中指定)。下面是我希望的语法:

synchronized(x && y && z) 获得x 、y 和z 对象的锁。
synchronized(x || y || z) 获得x 、y 或z 对象的锁。
synchronized( (x && y ) || z) 对于前面代码的一些扩展。
synchronized(...)[1000] 设置 1 秒超时以获得一个锁。
synchronized[1000] f(){...} 在进入f() 函数时获得this 的锁,但可有 1 秒超时。

TimeoutException 是 RuntimeException 派生类,它在等待超时后即被抛出。

超时是需要的,但还不足以使代码强壮。您还需要具备从外部中止请求锁等待的能力。所以,当向一个等待锁的线程传送一个 interrupt() 方法后,此方法应抛出一个 SynchronizationException 对象,并中断等待的线程。这个异常应是 RuntimeException 的一个派生类,这样不必特别处理它。

对 synchronized 语法这些推荐的更改方法的主要问题是,它们需要在二进制代码级上修改。而目前这些代码使用进入监控(enter-monitor)和退出监控(exit-monitor)指令来实现 synchronized 。而这些指令没有参数,所以需要扩展二进制代码的定义以支持多个锁定请求。但是这种修改不会比在 Java 2 中修改 Java 虚拟机的更轻松,但它是向下兼容现存的 Java 代码。

另一个可解决的问题是最常见的死锁情况,在这种情况下,两个线程都在等待对方完成某个操作。设想下面的一个例子(假设的):

class Broken {  Object lock1 =

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