多线程应用系统的异常处理方法和异常处理装置的制作方法

文档序号:6465567阅读:119来源:国知局

专利名称::多线程应用系统的异常处理方法和异常处理装置的制作方法
技术领域
:本发明涉及多线程应用系统中发生异常时处理异常的异常处理方法和异常处理装置。
背景技术
:高效和可信赖的异常处理机制,对应用程序的开发,尤其对多线程环境的开发,变得越来越重要。一般来说,开发人员各自编写代码,对这些线程中发生的阻塞、死锁、数据竞争等异常独立地进行捕获和处理,所有的异常处理逻辑分散,不能统一。同时,当这些异常在各线程出现的时候,没有跟踪程序来监控,更没有深入的分析。所以,在基于传统编程方法的多线程应用系统开发中,一直缺乏有效的异常处理手段。进一步来说,如果所有的异常处理在各线程中单独编码实现,各种异常的处理方式将被固化。这样,异常处理程序很难做到有弹性地处理多线程应用系统运行时的各种异常。而这些异常却是各线程经常崩溃的一个重要因素。为了解决多线程应用系统开发中异常处理的种种问题,在对比文献1(US5628016号公报)中提出了一种单线程应用系统的异常处理方法,使用栈空间来存储异常注册记录,并根据这些记录来处理异常,即,通过存储每个方法的上下文信息来进行单线程系统中的异常处理。具体而言,允许系统通过较少地执行一些有效的机器指令,将错误(ERR)的数据信息推入到栈空间中,达到高效地注册相应异常处理器的目的。虽然对比文件1所公开的技术能够提供一个捕获特定运行阶段异常的状态模型,但是需要将所有异常处理器的异常上下文信息都推入栈空间中,所以存在既花费时间、又浪费内存空间的问题。再者,对比文件l所公开的技术,本质上需要使用已经在现代编程语言不被推荐使用的、在共享方面可能存在问题的"goto"语法。而基于这种语法,应用程序实际上被构建在一个很难被理解和接受的逻辑上,所以存在开发者很难理解这种异常处理策略的问题。而且,由于对比文件1所公开的技术需要在运行的日志记录中,存储大量无序执行记录,存在不利于系统的追踪与改进的问题。另外,对比文件1所公开的技术倾向于处理单线程中的异常,若将这种方法移植到多线程的环境中,则存在不能适应多线程中需要同步的各种上下文信息、运行时也需要引用更多的空间和时间的问题。在多线程应用系统中,异常的捕获和预测对异常处理来说非常重要。然而,现有的异常处理需要在开发的代码中实现捕获和处理异常的任务。另外,异常处理策略在开发中通常被固定下来,所以不能在运行阶段提供灵活、有弹性的异常处理策略。
发明内容本发明是鉴于上述问题而提出的,目的在于提供一种多线程应用系统中发生异常时处理异常的异常处理方法和异常处理装置,能够捕获和预测线程在运行阶段出现的异常,并按照异常处理策略进行异常处理。本发明的多线程应用系统的异常处理方法,该多线程应用系统包括多个线程,其特征在于包括以下步骤资源设定步骤,预先设定上述多线程应用系统所引用的资源的基本信息;线程设定步骤,预先设定各线程的路由、初始切入点及原子行为,其中,上述原子行为是各线程中独立且不可分割的行为;策略设定步骤,对各线程的路由及原子行为,根据各自所引用的资源的基本信息,确定异常处理策略,并将该异常处理策略嵌入到上述多线程应用系统中;执行步骤,执行嵌入了异常处理策略的多线程应用系统;及记录步骤,记录上述多线程应用系统的执行日志。另外,本发明的多线程应用系统的异常处理装置,该多线程应用系统包括多个线程,其特征在于包括资源设定模块,预先设定上述多线程应用系统所引用的资源的基本信息;线程设定模块,预先设定各线程的路由、初始切入点及原子行为,其中,上述原子行为是各线程中独立且不可分割的行为;策略设定模块,对各线程的路由及原子行为,根据各自所引用的资源的基本信息,确定异常处理策略,并将该异常处理策略嵌入到上述多线程应用系统中;执行引擎模块,执行嵌入了异常处理策略的多线程应用6系统;及记录模块,记录上述多线程应用系统的执行日志。本发明的效果如下根据本发明多线程应用的异常处理方法和异常处理装置,采用通用的方法,即,根据预定的异常处理策略的组合,捕获多线程应用系统中的异常,并提供特定异常的走向预测。另外,通过记录所有的异常处理,为运行阶段的异常处理提供持久的可跟踪性。根据本发明多线程应用的异常处理方法和异常处理装置,线程在运行阶段中的所有异常都能够被完全捕获和管理,而且,开发者可以基于完备的执行日志来实现可调试、可跟踪、健壮的多线程系统。此外,对于已经开发完毕的多线程应用系统来说,只需要增加资源基本信息设定以及异常处理策略设定,就可以全面处理运行阶段可能出现的异常,能极大地改进多线程应用系统中的异常处理覆盖面。图1是示意地示出本发明的多线程应用系统的异常处理装置的框图。图2是示意地示出本发明的多线程应用系统的异常处理方法的流程图。图3是示出典型的多线程应用系统所包含的多个线程的一个示例的图。图4是表示多线程应用系统的各线程所引用的资源的一个示例的图。图5是示出线程的路由、初始切入点和原子行为的例子的图。图6是示出预先设定的异常处理策略的种类的例子的图。图7是示出本发明的嵌入了异常处理策略的多线程应用系统的异常处理实例的图。图8是示出具有合作性关系的两个线程的例子的图。图9是示出具有竞争性关系的两个线程的例子的图。图10是示出执行嵌入了异常处理策略的多线程应用系统的示例的图。图11是示出具有多个异常处理策略时投票确定最终异常处理策略的投票机制的图。图12是具有多个异常处理策略时多个行为投票确定最终异常处理策略的例子。图13是具有多个异常处理策略时多个行为投票确定最终异常处理策略的另一个例子。图14是示出发生异常时各线程之间的警告动作的图。具体实施例方式以下,参照本发明的多线程应用系统的异常处理装置和异常处理方法的实施方式。图l是示意性地示出本发明的多线程应用系统的异常处理装置的框图。如图1所示,本发明的多线程应用系统的异常处理装置10包括资源设定模块l,预先设定多线程应用系统所引用的资源的基本信息;线程设定模块2,预先设定各线程的路由、初始切入点及原子行为,其中,原子行为是各线程中独立且不可分割的行为;策略设定模块3,对各线程的路由及原子行为,根据各自所引用的资源的基本信息,设定异常处理策略,并将该异常处理策略嵌入到多线程应用系统中;执行引擎模块4,执行嵌入了异常处理策略的多线程应用系统;记录模块5,记录多线程应用系统的执行日志。图2示意性地示出本发明的多线程应用系统的异常处理方法的流程。如图2所示,在本发明的包括多个线程的多线程应用系统的异常处理方法中,首先,预先设定多线程应用系统所引用的资源的基本信息(资源设定步骤S101)。接着,预先设定各线程的路由、初始切入点及原子行为,其中,原子行为是各线程中独立且不可分割的行为(线程设定步骤S102)。然后,对各线程的路由及原子行为,根据各自所引用的资源的基本信息,设定异常处理策略,并将该异常处理策略嵌入到多线程应用系统中(策略设定步骤S103)。之后,执行嵌入了异常处理策略的多线程应用系统(执行步骤S104)。最后,记录多线程应用系统的执行日志(记录步骤S105)。以下,参照图3、图4和表1,说明资源设定步骤SIOI,即,预先设定多线程应用系统所引用的资源的基本信息。首先,参照图3说明多线程应用系统所包含的多个线程。图3是典型的多线程应用系统所包含的多个线程的一个示例。如图3所示,该多线程应用系统包括主线程projectl(21)、project2(22),主线程projectl(21)包括子线程CVS-Thread[project1](21_1)、StatCVS-Thread[project1](21_2)及Javac-Thread[projectl](21_3),主线程project2(22)包括子线程CVS-Thread[project2](22—1)、StatCVS-Thread[project2](22—2)及Javac-Thread[project2](22—3)。接着,参照图4和表1说明多线程应用系统所引用的资源。图4是表示多线程应用系统的各线程所引用的资源的一个示例。如图4所示,将多线程应用系统的各线程所使用的外部和内部的所有资源纳入一个统一的资源利用周期中,各线程所使用的资源,例如包括网络ll、文件系统12、数据库13、表格14、RAM15等存储装置、已利用资源16等。表1是表示多线程应用系统的各线程所引用的资源的基本信息的一个示例。表l资源的基本信息<table>tableseeoriginaldocumentpage9</column></row><table>在表1中,包括资源名称、以及资源类型和同步属性等资源的基本信息。资源的基本信息例如可以根据需要以XML格式的文件存储在多线程应用系统的存储装置中,也能够以其它格式的文件存储。资源的基本信息不限于资源类型和同步属性,只要是可以设定多线程应用系统中引用该资源的各线程之间的关系(例如竞争性关系、合作性关系)的信息即可。资源的同步属性如为互斥,则表明该资源不能同时被两个或两个以上的线程调用;相反,如果资源的同步属性为不互斥,则表明该资源可以同时被两个或两个以上的线程调用。在多线程应用系统中,资源被各线程引用,例如一些线程需要使用文件系统34,另外一些线程需要利用数据库36、表格38和RAM40。而各线程之间的关系是合作性还是竞争性的,由各线程所引用的资源的基本信息决定。例如,可以设定同时使用同步属性为"互斥"的资源的各线程之间的关系是竞争性关系,而使用同步属性为"不互斥"或不同时使用同步属性为"互斥"的资源等情况为合作性关系。同时执行竞争性的多个线程时,可能会引起死锁现象,所以为了构建可信赖、强壮的多线程应用系统,需要处理好引用资源的这些问题。以下,参照图5和表2A、表2B,说明线程设定步骤S102,g卩,预先设定各线程的路由、初始切入点及原子行为。图5是示出了线程的路由、初始切入点和原子行为的例子的图。如图5所示,EA为某个线程的调用入口,即初始切入点,P(A1)、P(B1)、(B2)、P(B3)、P(Cl)、P(C2)、P(C3)、P(..)表示原子行为,R(A)、R(B)、R(C)表示路由。所谓"路由"就是指线程中的状态节点,包含例如时间戳和数据对象等有意义的状态标记。所谓"行为"是路由之间的操作,例如进行数据存储。所谓"原子行为"就是指线程中路由之间的、独立且不可分割的行为。所谓"初始切入点"是线程的调用入口,即切入线程的路由节点,用于恢复线程的最初状态。原子行为能够被串行或并行地组织起来。例如,原子行为P(B1)、原子行为P(B2)和原子行为P(B3)都是并行的原子行为,分别对应到路由R(A)和路由R(B)。如图5所示,在进入某个线程的作为调用入口的初始切入点EA之后,原子行为P(Al)将被处理。作为带有状态信息的标记节点的路由R(A)、路由R(B)和路由R(C)用于存储所归属的线程句柄,这些线程句柄能够被其它线程或者多线程应用系统所引用。表2A示出了图3、图7所示的线程CVS-Thread的初始切入点、路由和行为的列表。其中,N/A表示为"空"。表2A线程CVS-Thread的路由和行为的列表<table>tableseeoriginaldocumentpage10</column></row><table>其中,"A-〉B"表示从路由A到路由B的行为。例如,"叩erate-〉collectRawData,,表示从路由operate至鹏由collectRawData的行为。表2B示出了图3、图7所示的线程StatCVS-Thread的初始切入点、路由和行为的列表。表2B.线程StatCVS-Thread的路由和行为的列表<table>tableseeoriginaldocumentpage11</column></row><table>以下,参照图6和表3,说明策略设定步骤S103,即,对各线程的路由及原子行为,根据各自所引用的资源的基本信息,设定异常处理策略,并将该异常处理策略嵌入到多线程应用系统中。图6示出了预先设定的异常处理策略的种类的例子。在图6中,预先设定了4种的策略,包括后退策略、前进策略、停止策略和等待策略。其中,后退策略用于激发恢复动作,回滚到之前的路由。前进策略用于激发前进动作,前进到下一个路由。停止策略用于激发中止信号,并将该中止信号发送给当前行为所在的当前线程,当前线程将退出到终止状态。等待策略用于激发等待信号,并将该等待信号发送给当前线程,直到其它线程唤醒处于等待状态的当前线程。如图6所示,当产生异常时发出请求,设定行为方向,即从后退策略、前进策略、停止策略和等待策略等策略中确定一个策略作为异常处理策略,并对"请求"返回"响应"。如上所述,利用图6所示的策略,各线程能够利用上下文信息,将预先设定的多种策略进行组合,来设定异常处理策略。并将所设定的异常处理策略嵌入各线程的相应的路由和行为中,从而将异常处理策略嵌入多线程应用系统。ii表3示出了如何定义异常处理策略的实例,主要举例了各子线程的路由及行为所引用的资源、以及在资源发生异常时的异常处理策略。表3异常处理策略的定义<table>tableseeoriginaldocumentpage12</column></row><table>在多线程应用系统的开发中,开发者可以将异常处理策略以XML的格式存储,也能够以其它格式的文件存储。以下,参照附图7、图8、图9和表4,说明执行步骤S104,即执行嵌入了异常处理策略的多线程应用系统。对于执行多线程应用系统的各线程所需的典型硬件环境没有特别限定。例如,可以具有处理器、Host/PCI高速缓沖存储器和桥(cacheandbridge)、主存储器和局域网适配器等,处理器具有运算和处理等能力,Host/PCIcacheandbridge提供用于存储数据或计算资源的接口。主存储器用于存储,例如存储调用桟空间及程序标量等。局域网适配器允许机器之间的相互通信,以获取存储在各自硬盘中的数据。图7示出了本发明的嵌入了异常处理策略的多线程应用系统的异常处理实例。如图7所示,主线程projectl的子线程StatCVS-Thread[projectl](21_2)用于使用CVS日志文件收集数据并存储到数据库中。子线程CVS-Thread[projectl](21_1)用于使用源代码和数据库来生成CVS日志文件。子线程CVS-Thread[project2](22_1)与子线程CVS-Thread[project1](21—l)—样,也用于使用源代码和数据库生成CVS日志文件。这三个子线程在各自所在的主线程中并行地运行。另外,图7中这三个子线程所包含的曲线表示各子线程中的行为,而白色的圆圈表示路由。具体而言,在图7中,子线程CVS-Thread[projectl](21—l)有3个路由,即路由EntryPoint34、路由operate35、路由collectRawData36;子线程CVS-Thread[project2](22—1)的路由与子线程CVS-Thread[project1](21—l)相同;子线程StatCVS-Thread[projectl](21—2)有3个路由,即路由EntryPoint31、路由operate32、路由collectRawData33。各子线程的两个相邻路由之间的曲线为原子行为。如图7所示,在子线程CVS-Thread[project1](21—1)的行为(EntryPoint-〉operate)(作为初始切入点的足各由EntryPoint34和路由operate35之间的原子行为)运行时,遇到了异常ConnectionFail。在该行为中,上下文信息contextl引用了数据库13和源代码17等资源。根据表2A以及表3,在数据库连接失败的情况下,本系统可以设定异常处理器Dhandler的异常处理策略为前进策略,即前进到路由operate35。在子线程StatCVS-Thread[projectl](21_2)的运行中,如果遇到了异常FileNotFound(文件不存在),则根据表2B以及表3,在文件不存在的情况下,本多线程应用系统可以确定异常处理器FHandle:r的异常处理策略为前进策略,即前进到路由collectRawData33。表4示出了图7的各子线程之间的关系是竞争或合作的关系。<table>tableseeoriginaldocumentpage13</column></row><table>图8示出了具有合作性关系的两个线程的例子。在图8中,线程Threadl44和线程Threadn46构成合作性关系。具体而言,线程Threadl44包含初始切入点entrypointl48和路由SubGoalA60,在初始切入点entrypointl48和路由SubGoalA60之间的曲线为原子行为。线程Threadn46包含初始切入点entrypointn50和路由SubGoalB70,在初始切入点entrypointn50和路由SubGoalB70之间的曲线为原子行为。而且,线程Threadl44引用资源Resource")52和资源Resource(B),线程Threadn46引用资源Resource(A)和资源Resource(..)。由于预先设定当线程Threadl44的某个业务逻辑完成后,线程Threadn46的初始切入点entrypointn50启动,所以线程Threadl44和Threadn46是合作性关系。在合作性的各线程中,当在某一个线程中产生异常时,根据该异常的上下文信息,来分析异常发生的原因。然后,将分析的结果通知给与产生异常的线程之间具有合作关系的其它线程。在图8中,在线程Threadl44中产生异常Exception(A)56,其上下文信息是Contextl54,其异常处理器是HandlerA58。若根据上下文信息Context154检测到资源Resource(A)52无效,则异常处理器HandlerA58根据与上下文信息相应的策略(例如前进策略)来处理该异常,向线程Threadn46警告发生异常,即资源Resource(A)无效。然后,线程Threadl44前进到路由SubgoalA60。接着,线程Threadn46接收到来自线程Threadl44的警告信息即资源Resource(A)无效而被启动,同时,根据接收到的警告信息预测到自身线程产生异常Exc印tion(B)64的可能性。于是,线程Threadn46设定异常处理器Hanlder(B)66的异常处理策略为前进策略,直接前进到路由SubGoalB70。这样一来,合作性的各线程之间能够根据资源的引用和策略,共享异常的上下文信息,在多线程之间实现高效、可信赖的处理异常。图9展示了具有竞争性关系的两个线程的例子。在图9中,线程Threadl72和线程Threadn73构成竞争性关系。具体而言,线程Threadl72包含初始切入点entrypoint74和路由SubGoalA86,在初始切入点entrypoint74和路由SubGoalA86之间的曲线为原子行为。而且,线程Threadl72引用资源Resource(A)88和资源Resource(B)。线程Threadn73包含与线程Threadl72相同的路由、原子行为和引用资源。这样一来,线程Threadl72和线程Threadn73为竞争性关系。在竞争性的各线程中,当在某一个线程中产生异常时,根据该异常的上下文信息,来分析异常发生的原因。然后,将分析的结果通知给和与产生异常的线程之间具有竞争性关系的线程。在图9中,在线程Threadl72中产生异常Exc印tion(A)80,其上下文信息是Contextl78,其异常处理器是HandlerA82。若根据上下文信息Contextl78检测到资源Resource(A)80无效,则异常处理器HandlerA82根据与上下文信息相应得策略(例如前进策略)来处理该异常,向Threadn73警告发生异常,即资源Resource")88无效。然后,线程Threadl72被前进到路由SubgoalA86。接着,线程Threadn73接收到来自线程Threadl72的警告信息即资源Resource(A)88无效而被启动。同时,根据接收到的警告信息预测到自身线程产生异常Exc印tion(A)80的可能性。于是,线程Threadn73设定异常处理器Hanlder(A)84的异常处理策略为前进策略,直接前进到路由SubGoalA86。这样一来,竞争性的各线程之间能够根据资源的引用和策略,共享异常的上下文信息,在多线程之间实现高效、可信赖的处理异常。以下,参照附图10,说明执行步骤S104,g卩,执行嵌入了异常处理策略的多线程应用系统。图10示出了执行嵌入了异常处理策略的多线程应用系统的示例。如图10所示,在一个线程被启动之后,该线程进入到作为初始切入点的路由(步骤234)。处理当前路由(步骤236)之后,判断当前路由是否是作为结束路由的路由(步骤238)。若判断为是结束路由(在步骤238中为"是"),则结束当前线程(步骤286)。若判断为不是结束路由(在步骤238中为"否"),则判断当前路由是否异常(例如堵塞)(步骤240)。若判断为当前路由已经堵塞(在步骤240中为"是"),则在当前路由发生堵塞的所有线程为下一步的方向(即异常处理策略)进行投票(步骤242)。若判断为当前路由没有堵塞(在步骤240中为"否"),则检查当前路由是否还有其它行为需要执行(步骤244)。如果没有其它更多的行为需要执行(在步骤244中为"是"),则多线程应用系统为当前路由备份上下文信息的数据(步骤246),然后,调用当前行为(步骤248)。在调用当前行为的过程中(步骤248),若当前线程接收到来自其它线程的警告信息(在步骤250中为"是"),则对当前行为选择异常处理策略(步骤270),并且执行该异常处理策略(步骤272)。这样一来,该行为被导入到与异常处理策略相对应的下一个路由(步骤2§4~274)。在该行为抵达该下一个路由之后,抵达该路由的所有行为投票选择下一个路由的前进方向(步骤282)。在调用当前行为的过程中(步骤248),若当前线程未接收到来自其它线程的警告信息(在步骤250中为"否"),则继续执行该行为直到产生异常(步骤252)。一旦产生异常(步骤252),该行为就收集异常的上下文信息(步骤254),并分析受到影响的资源(步骤256)。接着,分析所有竞争性线程(步骤260)和合作性线程(步骤258)。然后,在竞争性线程和合作性线程受到影响时(在步骤264、262中为"是"),警告引用该资源的线程所对应的所有竞争性线程(步骤266)和合作性线程(步骤268)。之后,对当前行为选择异常处理策略(步骤270),并执行该处理异常策略(步骤272)。在竞争性线程和合作性线程受到影响时(在步骤264、262中为"否,,),进入步骤270。图11例示了图10的步骤242中线程或者行为之间的投票机制。如图ll所示,在判断为需要投票的情况下(在步骤301中为"是"),例如在多线程发生异常时存在多个异常处理策略的情况下,进行投票(步骤S302)。在所有参与者参与投票之前(在步骤303中为"否"),等待一定周期(步骤S304),在所有参与者参与投票之后(在步骤303中为"是"),收集所有参与者的意见(步骤305),根据投票结果来确定异常处理策略,即确定路由方向(步骤S308)。在不需要投票的情况下(在步骤301中为"否"),处理路由(步骤S306)之后,结束投票(步骤S307)。图12是多个行为投票确定异常处理策略的例子。在图12中,在线程设定步骤S102,设定该线程ThreadA的初始切入点为EA,定义路由RA116和路由RA2,定义在路由RA1和路由RA2之间并行的行为Actionl、行为Action2和行为Action3。如图12中的虚线所示,行为Actionl引用资源cvs-file、source—code,行为Action2弓l用资源hope—db,行为Action3弓l用资源cvs—r印ository、source—code。然后,如表5所示,定义在上述行为中可能遇到的异常以及对应的异常处理策略。表5行为遇到的异常以及对应的异常处理策略<table>tableseeoriginaldocumentpage17</column></row><table>接着,执行引擎模块开始执行该线程ThreadA。线程ThreadA执行到路由RA1之后,将继续同时执行行为Actionl、行为Action2和行为Action3。假设在执行阶段,行为Actionl所引用的资源cvs—file遇到了"没有写文件的权限"的异常,根据表1,行为Actionl对应的异常处理策略是"停止"策略;而且,行为Action2引用的资源h叩e—db遇到了"数据库连接失败"的异常,根据表1,行为Action2对应的异常处理策略是"前进"策略;而且,行为Action3引用的资源source—code遇到了"没有硬盘驱动器"的异常,根据表1,行为Action3对应的异常处理策略是"前进"策略。在这种情况下,执行引擎模块根据图ll的投票机制,在这三个行为间进行投票,从而确定异常处理策略。例如,如果投票机制是"少数服从多数"的原则,则根据当前三个行为的处理策略。此时,行为Action2和行为Action3的异常处理策略都是"前进"策略,而仅行为Actionl的异常处理策略是"停止"策略,所以投票结果是确定"前进"策略为异常处理策略,以协调三个行为的异常处理。这样一来,线程ThreadA接着执行"前进"策略,前进到路由RA2340。图13是多个行为投票确定异常处理策略的另一个例子。在图13中,在线程设定步骤S102,设定该线程ThreadB的初始切入点为EB,定义路由RB1和路由RB2,定义在路由RBl和路由RA2之间并行的行为Action4、行为Action5行为Action6。如图13中的虚线所示,行为Action4引用资源cvs-file、hope—db、source_code,行为Action5弓l用资源source—code,行为Action6用资源cvs_repository。然后,如表6所示,定义在上述行为中可能遇到的异常以及对应的异常处理策略。表6行为遇到的异常以及对应的异常处理策略<table>tableseeoriginaldocumentpage18</column></row><table>接着,执行引擎模块开始执行该线程ThreadB。线程ThreadB执行到RBI之后,将继续同时执行行为Action4、行为Action5和行为Action6。假设在执行阶段,行为Action4引用的资源cvs—file资源遇到了"没有写文件的权限"的异常,根据表2,行为Action4对应的异常处理策略是"停止"策略;而且,行为Action2引用的资源source—code遇到了"没有硬盘驱动器"的异常,根据表2,行为Action5对应的异常处理策略是"前进"策略;而且,行为Action6引用的资源cvs—r印oristory遇到了"无权限"异常,根据表2,行为Action6对应的异常处理策略是"等待"策略。根据当前三个行为的处理策略,行为Action5是"前进"策略,行为Action6是"等待"策略,行为Action4是"停止"策略。在这种情况下,执行引擎模块将根据图ll的投票机制,在这三个行为间进行投票,从而确定异常处理的线程执行方向。例如,如果投票机制是"引用资源最多的行为投票权重最大"的原则,那么在这些行为中行为Action4引用的资源最多,那么投票结果就会是确定"停止"策略为异常处理策略,以协调三个行为的异常处理。这样,线程ThreadB的下一步执行方向将会被执行引擎模块前置到结束路由节点,该线程的执行将结束。以上例举了以得票数量的多少作为规则、以及根据引用资源的多少来确定异常处理策略的方式,但本发明不限于此,可以根据需要来制定其它另外,图1所示的执行引擎模块4还可以具有图未示出的投票模块,该投票模块在线程发生异常时存在多个异常处理策略的情况下,按照预定规则通过投票来确定异常处理策略。图14示出了线程之间的警告动作。线程ThreadA是主动发起警告的线程,其发送警告信息276给线程ThreadB。线程ThreadB接收到警告信息276之后,检查该警告信息是否完整且有效278,并向线程ThreadA发送响应信息280。以下,参照表7,说明记录步骤S105,即,记录多线程应用系统的执行日志。表7示出了多线程应用系统的执行日志的一个例子。如表7所示,该日志包括两个项目,即,记录日期和异常处理记录。在表7中记录了日期、多线程应用系统的线程名称、异常及异常处理策略等信息。这样一来,多线程应用系统的维护或开发人员在获取到详细的执行日志信息之后,可以方便快速的分析多线程应用系统中的瓶颈以及异常发生的规律,从而可以改进异常处理策略定义,构建更健壮、可靠的多线程应用系统。表7多线程应用实例的执行日志<table>tableseeoriginaldocumentpage19</column></row><table>如上所述的资源设定步骤S101到策略设定步骤S103由开发者在开发多线程应用系统时完成,执行步骤S104和记录步骤S105由多线程应用系统自动完成,即,在多线程应用系统运行时,根据异常发生的情况,自动触发执行。该异常处理装置可以应用到一些大量引用资源的多线程应用中,诸如从多种异构数据源收集数据的数据集成系统,监测多个终端指标的监测系统,使用中间文件运行大量数据转换以及分析的决策支持系统等。在这些收集、监测以及分析转换海量数据的多线程应用中,本发明能充分发挥快速和有效地捕获与处理异常的作用,从而帮助开发者构建可调试、可跟踪、健壮的多线程应用系统。权利要求1.一种多线程应用系统的异常处理方法,该多线程应用系统包括多个线程,其特征在于包括以下步骤资源设定步骤,预先设定上述多线程应用系统所引用的资源的基本信息;线程设定步骤,预先设定各线程的路由、初始切入点及原子行为,其中,上述原子行为是各线程中独立且不可分割的行为;策略设定步骤,对各线程的路由及原子行为,根据各自所引用的资源的基本信息,确定异常处理策略,并将该异常处理策略嵌入到上述多线程应用系统中;执行步骤,执行嵌入了异常处理策略的多线程应用系统;记录步骤,记录上述多线程应用系统的执行日志。2.如权利要求l所述的多线程应用系统的异常处理方法,其中,上述资源的基本信息包括资源类型和同步属性。3.如权利要求1所述的多线程应用系统的异常处理方法,其中,上述路由所在线程具有上下文信息及与该上下文信息对应的异常处理策略。4.如权利要求1所述的多线程应用系统的异常处理方法,其中,在执行步骤中,正在执行的线程若发生异常,则向其竞争性的其它线程及/或合作性的其它线程发出警告信息。5.如权利要求4所述的多线程应用系统的异常处理方法,其中,正在执行的线程若接收到来自其它线程的警告信息,则按照上述上下文信息对应的异常处理策略进行异常处理。6.如权利要求5所述的多线程应用系统的异常处理方法,其中,在线程发生异常时存在多个异常处理策略的情况下,按照预定规则通过投票来确定最终异常处理策略。7.如权利要求6所述的多线程应用系统的异常处理方法,其中,将上述多个异常处理策略中数量最多的异常处理策略确定为上述最终异常处理策略。8.如权利要求6所述的多线程应用系统的异常处理方法,其中,将引用资源最多的原子行为的异常处理策略确定为上述最终异常处理策略。9.如权利要求1所述的多线程应用系统的异常处理方法,其中,在记录步骤中,记录所有上下文信息及其相应的异常处理。10.—种多线程应用系统的异常处理装置,该多线程应用系统包括多个线程,其特征在于包括资源设定模块,预先设定上述多线程应用系统所引用的资源的基本信息;线程设定模块,预先设定各线程的路由、初始切入点及原子行为,其中,上述原子行为是各线程中独立且不可分割的行为;策略设定模块,对各线程的路由及原子行为,根据各自所引用的资源的基本信息,确定异常处理策略,并将该异常处理策略嵌入到上述多线程应用系统中;执行引擎模块,执行嵌入了异常处理策略的多线程应用系统;记录模块,记录上述多线程应用系统的执行日志。11.如权利要求10所述的多线程应用系统的异常处理装置,其中,上述资源的基本信息包括资源类型和同步属性。12.如权利要求10所述的多线程应用系统的异常处理装置,其中,上述路由所在线程具有上下文信息及与该上下文信息对应的异常处理策略。13.如权利要求10所述的多线程应用系统的异常处理装置,其中,上述执行引擎模块中,正在执行的线程若发生异常,则向其竞争性的其它线程及/或合作性的其它线程发送警告信息。14.如权利要求13所述的多线程应用系统的异常处理装置,其中正在执行的线程若接收到来自其它线程的警告信息,则按照上述上下文信息对应的异常处理策略进行异常处理。15.如权利要求14所述的多线程应用系统的异常处理装置,其中,上述执行引擎模块还具有投票模块,该投票模块在线程发生异常时存在多个异常处理策略的情况下,按照预定规则通过投票来确定异常处理策略。16.如权利要求15所述的多线程应用系统的异常处理装置,其中,上述投票模块将上述多个异常处理策略中数量最多的异常处理策略确定为上述最终异常处理策略。17.如权利要求15所述的多线程应用系统的异常处理装置,其中,上述投票模块将引用资源最多的原子行为的异常处理策略确定为上述最终异常处理策略。18.如权利要求10所述的多线程应用系统的异常处理装置,其中,记录模块记录所有上下文信息及其相应的异常处理。全文摘要本发明的多线程应用系统的异常处理方法和异常处理装置,能够捕获线程在运行阶段出现的异常,并按照预定的异常处理策略进行异常处理。多线程应用系统的异常处理方法,该多线程应用系统包括多个线程,其特征在于包括以下步骤资源设定步骤,预先设定多线程应用系统所引用的资源的基本信息;线程设定步骤,预先设定各线程的路由、初始切入点及原子行为,其中,原子行为是各线程中独立且不可分割的行为;策略设定步骤,对各线程的路由及原子行为,根据各自所引用的资源的基本信息,确定异常处理策略,并将该异常处理策略嵌入到多线程应用系统中;执行步骤,执行嵌入了异常处理策略的多线程应用系统;记录步骤,记录多线程应用系统的执行日志。文档编号G06F11/34GK101639803SQ20081013115公开日2010年2月3日申请日期2008年7月30日优先权日2008年7月30日发明者三宅滋,三部良太,玄张,蕾张,河合克己,谭一兵申请人:株式会社日立制作所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1