欢迎来到天天文库
浏览记录
ID:42575738
大小:42.42 KB
页数:19页
时间:2019-09-18
《Java实现生命周期管理机制》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、最近一直在研究某个国产开源的MySQL数据库中间件,拉下其最新版的代码到eclipse后,启动起来,然后做各种测试和代码追踪;用完想要关闭它时,拉出它的STOP类想要运行时,发现这个类里赫然只写以下几行代码,于是我感觉瞬间受到了很多伤害。publicstaticvoidmain(String[]args){System.out.println(newDate()+",servershutdown!");}这个中间件启动和运行的时候,开启了监听,启动着许多线程在跑着,并且有许多socket连接。但是并没有找到一个优雅的方式将其关闭。于是无奈之下,我只能去点eclipse的心碎
2、小红点,强行停掉VM。如果是一个架构良好,模块化清晰的软件,特别是Server类的软件,拥有一套生命周期管理机制是非常重要的。不仅可以管理各个模块的生命周期,也可以在启停整个软件的时候更优雅,不会漏掉任何资源。生命周期机制简易实现生命周期状态一个模块的生命周期状态一般有以下几个:新生->初始化中->初始化完成->启动中->启动完成->正在暂停->已经暂停->正在恢复->已经恢复->正在销毁->已经销毁其中,任何一个状态之间的转化如果失败,那么就会进入另外一种状态:失败。为此,可以用一个枚举类来枚举出这几个状态,如下所示:publicenumLifecycleState{NE
3、W,//新生INITIALIZING,INITIALIZED,//初始化STARTING,STARTED,//启动SUSPENDING,SUSPENDED,//暂停RESUMING,RESUMED,//恢复DESTROYING,DESTROYED,//销毁FAILED;//失败}接口生命周期中的各种行为规范,也需要一个接口来定义,如下所示:publicinterfaceILifecycle{/***初始化**@throwsLifecycleException*/publicvoidinit()throwsLifecycleException;/***启动**@throwsL
4、ifecycleException*/publicvoidstart()throwsLifecycleException;/***暂停**@throwsLifecycleException*/publicvoidsuspend()throwsLifecycleException;/***恢复**@throwsLifecycleException*/publicvoidresume()throwsLifecycleException;/***销毁**@throwsLifecycleException*/publicvoiddestroy()throwsLifecycleExc
5、eption;/***添加生命周期监听器**@paramlistener*/publicvoidaddLifecycleListener(ILifecycleListenerlistener);/***删除生命周期监听器**@paramlistener*/publicvoidremoveLifecycleListener(ILifecycleListenerlistener);}发生生命周期状态转化时,可能需要触发对某类事件感兴趣的监听者,因此ILifeCycle也定义了两个方法可以添加和移除监听者。分别是:publicvoidaddLifecycleListener(IL
6、ifecycleListenerlistener);和 publicvoidremoveLifecycleListener(ILifecycleListenerlistener);监听者也由一个接口来定义其行为规范,如下所示:publicinterfaceILifecycleListener{/***对生命周期事件进行处理**@paramevent生命周期事件*/publicvoidlifecycleEvent(LifecycleEventevent);}生命周期事件由LifecycleEvent来表示,如下所示:publicfinalclassLifecycleEvent
7、{privateLifecycleStatestate;publicLifecycleEvent(LifecycleStatestate){this.state=state;}/***@returnthestate*/publicLifecycleStategetState(){returnstate;}}骨架实现有了ILifeCycle接口以后,任何实现了这个接口的类将会被作为一个生命周期管理对象,这个类可以是一个socket监听服务,也可以代表一个特定的模块,等等。那我们是不是只要实现ILifeCycle就可以
此文档下载收益归作者所有