`
labile
  • 浏览: 43191 次
  • 来自: ...
文章分类
社区版块
存档分类
最新评论

用 Proxy 简化加锁代码,用 ReadWriteLock 以提高并行性

 
阅读更多
java.lang.reflect.Proxy 简化加锁代码,用 ReadWriteLock 以提高并行性
 
有一个 CoreManager 接口,用来代表一个服务,每个方法对应服务的一个子功能。
 
方法 startup() 要求服务在 stoped 状态。
方法 shutdown() 要求服务在 started 状态。
方法 isStarted() 要求服务在 stoped/started 状态。
其它方法,要求服务在 started 状态。
 
 

/**
 *Allmehtodwillthrow{@link ManageException}thenTargetserverstoped.
 *
 */
publicinterface CoreManager {
 
      // ------- Target Server Control ---------------------------
      /**
       *ShutdownTargetServerCore.
       * 
       *@throwsManageExceptionstartuperror
       */
      publicvoid startup() throws ManageException;
 
      /**
       *ShutdownTargetServerCore.
       * 
       *@throwsManageExceptionshutdownerror
       */
      publicvoid shutdown() throws ManageException;
     
      /**
       *returntureifTargetServerisstarted
       *@returntheresult
       *  
       */
      publicboolean isStarted();
     
      /**
       *Reconfigurethelogsetting
       *
       *@paramlogConfig
       *@throwsManageException
       */
      publicvoid configureLog(LogConfig logConfig) throws ManageException;
 
      // ------- Component Manage-------------------------------
      /**
       *Addcomponent.
       *
       *@paramcomponentInfo
       *@throwsManageExceptionaddfail.
       */
      publicvoid addComponent(AbstractComponentBean componentInfo)
                  throws ManageException;
 
      /**
       *Returnallcomponentnames.
       *
       *@returnnotnull
       *@throwsManageException
       */
      public String[] getAllComponentNames() throws ManageException;
 
      /**
       *Returnthecomponentsetting.
       *
       *@paramcomponentName
       *@returnresultnotnull
       *@throwsManageExceptioncomponentnotfound
       */
      public AbstractComponentBean getComponentInfo(String componentName)
                  throws ManageException;
 
      /**
       *Removecomponent.
       *
       *@paramcomponentName
       *@throwsManageExceptioncomponentnotfound
       */
      publicvoid removeComponent(String componentName) throws ManageException;
 
      /**
       *Applynewroutinggraph
       *
       *@deprecateduse{@link #setNewRouting(ComponentConnector[])}instead
       *@paramroutingBeans
       *@returntureonlyifallconnectorisseted
       *@throwsManageException
       */
      @Deprecated
      publicboolean setNewRouting(ConnectorBean[] routingBeans) throws ManageException;
 
      /**
       *Applynewroutinggraph
       *
       *@paramroutingBeans
       *@returntureonlyifallconnectorisseted
       *@throwsManageException
       */
      publicboolean setNewRouting(ComponentConnector[] routingBeans) throws ManageException;
 
      /**
       *Changecomponentsetting
       *
       *@paramcomponentBean
       *@throwsManageExceptioncomponentnotfound
       */
      publicvoid changeComponentSetting(AbstractComponentBean componentBean)
                  throws ManageException;
 
      /**
       *Returntrueifcomponentexsit.
       *
       *@paramcomponentName
       *@returntheresult
       *@throwsManageException
       */
      publicboolean isComponentExist(String componentName) throws ManageException;
 
      /**
       *Getthedevicecomponentstatus.
       *Ifthecomponentin<code>componentNames</code>notexist,UNKNOWNwillreturn.
       *
       *@paramcomponentNames
       *@returnresult
       *@throwsManageException
       */
      public ConnectionStatus[] getDeviceComponentStatus(String[] componentNames) throws ManageException;
 
      /**
       *Settheenabledpropertyofcomponent.
       *
       *@paramcomponentName
       *@paramenabled
       *@throwsManageExceptioncomponentnotfound.
       */
      publicvoid setComponentEnabledProperty(String componentName,
                  boolean enabled) throws ManageException;
 
      // ------- Reader Control ----------------------------------
      publicvoid setAutoModeOn(String deviceName) throws ManageException;
 
      publicvoid setAutoModeOff(String deviceName) throws ManageException;
 
      public String getVersionNumber(String readerName) throws ManageException;
 
      publiclong getNumberOfReads(String readerName) throws ManageException;
 
      publiclong[] getNumberOfReads(String[] readerNames) throws ManageException;
 
      public Collection<DRFITag> readTags(String readerName)
                  throws ManageException;
 
      public Collection<DRFITag> readTags(String readerName, int antennaSequenceNo)
                  throws ManageException;
 
      public Collection<DRFITag> readTags(String readerName,
                  int[] antennaSequenceNo) throws ManageException;
 
      publicvoid writeTag(String deviceName, String writeFlag, String epc,
                  String userData, String killCode, int antennaSequenceNo)
                  throws ManageException;
 
      publicvoid killTag(String deviceName, String uri, String killCode,
                  int antennaSequence) throws ManageException;
 
      publicvoid setReadPower(String deviceName, int powerPercent)
                  throws ManageException;
 
      /**
       *Sendacommand(Event)toacomponent
       *
       *@paramtargetCompName
       *@paramevent
       *@returnmaynull
       *@throwsManageExceptionComponentnotfound/stoped.
       */
      public Object sendEvent2Component(String targetCompName, Object event)
                  throws ManageException;
 
      /**
       *Sendacommand(Event)toacomponent
       *
       *@paramtargetCompName
       *@paramsrcCompInfo
       *@paramevent
       *@returnmaynull
       *@throwsManageExceptionComponentnotfound/stoped.
       */
      public Object sendComponentEvent2Component(String targetCompName,
                  ConnectorEndpoint srcCompInfo, Object event)
                  throws ManageException;
     
     
      public List<ComponentConnector> getAllConnectors() throws ManageException;
 
      publicvoid addConnector(ComponentConnector connector) throws ManageException;
 
      publicvoid removeConnector(ComponentConnector connector) throws ManageException;
 
}

 
 
有这样一个最核心的实现:
 

publicclass ManagerImpl implements CoreManager {
 
      privatefinal TargetServerCore TargetServer;
 
      privatestaticfinal Log log = LogFactory.getLog( ManagerImpl.class );
 
      public ManagerImpl(TargetServerCore TargetServer) {
            this.TargetServer = TargetServer;
<d>
分享到:
评论

相关推荐

    Proxy 模式学习代码

    Proxy模式是一种设计模式,它允许我们为一个对象创建一个代理对象,这个代理对象在客户端和目标对象之间起到中介的作用。这种模式在软件工程中广泛应用,主要用于控制对真实对象的访问,提供额外的功能,如日志、...

    VB做的Proxy服务器源代码

    【标题】"VB做的Proxy服务器源代码"涉及的是使用Visual Basic(VB)编程语言构建一个代理服务器的过程。在IT领域,代理服务器是一个重要的网络组件,它充当客户端与目标服务器之间的中介,可以用于多种用途,如数据...

    Proxy服务器源代码

    Proxy服务器源代码

    IGMP proxy源代码

    它是IP多播的关键组成部分,允许主机声明它们对多播组的兴趣,而路由器则使用这些信息来转发多播流量。IGMP Proxy是IGMP协议的一个实现,它允许在子网之间代理多播成员关系,特别是在存在网络隔离或者不支持IGMP的...

    ABAP 调用ABAP PROXY

    在SAP系统中,ABAP调用ABAP Proxy是一种常见...总的来说,ABAP调用ABAP Proxy是一种强大的集成技术,它简化了分布式系统的交互,提高了系统的可扩展性和可维护性。理解并熟练掌握这一技术对于SAP开发人员来说至关重要。

    proxy源代码分析

    proxy源代码分析 Proxy 源代码分析是 Linux 网络编程的经典示例代码,本文将从这段代码出发,谈谈如何学习 Linux 网络编程。 Proxy 源代码分析可以帮助初学者快速掌握 Linux 网络编程的基础知识。 Linux 网络编程...

    用VB做的Proxy服务器源代码

    标题 "用VB做的Proxy服务器源代码" 暗示了这是一个使用Visual Basic(VB)编程语言编写的代理服务器程序的源代码。代理服务器在计算机网络中扮演着重要的角色,它作为一个中间人,允许客户端通过它来访问互联网上的...

    proxy.jsp、proxy.ashx、proxy.php、proxy.config

    **proxy.jsp** 是一个用Java编写的代理页面,适用于Java服务器环境,如Tomcat。它通过设置`esri.config.defaults.io.proxyUrl`来指定代理服务的URL,当ArcGIS JavaScript API请求需要跨域访问的资源时,会自动通过这...

    Proxy源代码分析

    Proxy源代码分析可以帮助我们深入了解网络通信的原理以及如何在Linux环境下实现客户端-服务器模型。以下是对Proxy源代码及其涉及的关键知识点的详细说明: 1. **套接字(socket)**:在Linux网络编程中,套接字是进程...

    Socks Proxy 源代码

    这个过程中,网络I/O操作通常采用异步编程模型,以提高性能和响应性。 通过阅读和学习`src`目录中的源代码,我们可以更深入地了解如何在C#中实现Socks Proxy的每个细节,包括错误处理、性能优化、并发控制等方面。...

    Proxy.zip示例代码

    代理模式是一种常用的设计模式,它在对象结构中提供一个代理以控制对原对象的访问。在代理模式中,代理类作为目标类的代表,可以在目标类执行某些操作之前或之后添加额外的功能,或者对目标类的功能进行增强。这种...

    Proxy源代码分析--谈谈如何学习linux网络编程

    在当前IT技术快速发展的背景下,Linux系统以其强大的稳定性和灵活性,在服务器领域占据了举足轻重的地位。对于想要深入了解Linux网络编程的初学者来说,《Proxy源代码分析——谈谈如何学习Linux网络编程》是一篇非常...

    goproxy-android snail007/goproxy全能代理服务器安卓版

    此项目旨在为移动设备提供强大的网络代理功能,使得用户能够在安卓设备上通过自定义的代理规则管理网络流量,提高网络安全性和数据隐私保护。本文将详细介绍GoProxy-Android的核心概念、工作原理以及如何在Android ...

    Petalinux dma-proxy.已测可用,注意参数一致

    在嵌入式系统开发领域,Petalinux 是...在实际应用中,开发者需要仔细阅读Petalinux的文档,了解如何配置和使用dma-proxy,同时结合`dma-proxy-test.c`进行调试,以确保所有参数设置正确无误,达到预期的性能和稳定性。

    JsProxy A js proxy online

    混淆主要是为了保护源代码不被轻易阅读和理解,而压缩则是为了减少代码体积,提高网页加载速度。在生产环境中,这一步骤通常是在部署前完成的,以防止代码被逆向工程,同时优化用户体验。 JsPacker可能包括以下几种...

    ftpproxy-1.2.3.rar_Linux c proxy_ftpproxy_ftp代理_linux ftp_proxy-

    proxy源代码,linux下的ftp 代理的源代码,大家多多支持啊

    de4dot Mod TheProxy

    需要注意的是,尽管de4dot Mod TheProxy是一个强大的工具,但使用它也需要一定的.NET基础知识,包括理解IL代码和.NET程序集的结构。同时,由于反混淆可能涉及对受版权保护的代码进行操作,因此在使用时必须遵守相关...

    知名代理软件3proxy源代码

    著名非主流代理软件3proxy源代码,支持http/socks/tcp或udp port map,跨平台,支持linux/windows,vc亲测可用

    解决vue中使用proxy配置不同端口和ip接口问题

    在使用Vue开发项目的过程中,我们经常会...总之,合理配置proxy代理,并结合动态配置策略,可以大幅提高开发效率,保证项目的灵活性和可维护性。希望本文介绍的内容能够帮助大家在Vue项目中更有效地解决接口配置问题。

    Nginx之proxy_redirect使用详解

    在讨论Nginx的proxy_redirect指令时,我们首先要明确其在Nginx配置中的作用和重要性。proxy_redirect指令主要用于在反向代理过程中修改响应头中的Location和Refresh字段值。在Web服务器配置中,特别是在使用Nginx...

Global site tag (gtag.js) - Google Analytics