一种加载插件的方法及终端设备与流程

文档序号:16207261发布日期:2018-12-08 07:16阅读:171来源:国知局
一种加载插件的方法及终端设备与流程
本发明涉及通信
技术领域
,尤其涉及一种加载插件的方法及终端设备。
背景技术
插件(plug-in,又称addin、add-in、addon或add-on,又译外挂)是一种遵循一定规范的应用程序接口编写出来的程序。插件是指会随着ie浏览器的启动自动执行的程序,其只能运行在程序规定的系统平台下,可能同时支持多个平台,但不能脱离指定的平台单独运行。也就是说,插件必须依附于应用程序的启动才能够运行。插件的类型有无数种,例如有些插件程序能够帮助用户更方便浏览因特网或调用上网辅助功能,有的插件可以帮助用户网上支付等等。例如,在安装相关的插件后,浏览器能够直接调用插件程序,用于处理特定类型的文件。鉴于插件的特殊性,在运行插件之前必须先加载插件,而在目前加载插件方式,多个进程可以在任意时刻加载插件,但是,如果允许两个及以上进程同时加载同一个插件,是会报错的。故而,现有技术存在的问题是,两个及以上进程同时加载同一个插件导致插件加载错误的技术问题。技术实现要素:鉴于上述问题,为了避免多个进程在同一时刻加载同一个插件。提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的一种加载插件的方法及终端设备。本发明的一个方面,提供了一种加载插件的方法,包括:在m个进程加载n个插件的过程中,所述m个进程中的各进程实时检测所述n个插件中的各插件的独占锁是否处于使用状态;其中,各插件利用各自的独占锁进行锁定,所述独占锁用于禁止所属插件响应没有获得所述独占锁的进程的加载请求;m、n为正整数;若所述m个进程中的各进程检测到所述n个插件中有独占锁处于使用状态的第一插件,则所述m个进程中的各进程加载所述n个插件中独占锁没有处于使用状态的第二插件。优选的,所述m个进程中的各进程实时检测所述n个插件中的各插件的独占锁是否处于使用状态,具体包括:所述m个进程中的各进程实时检测各插件的独占锁是否被其他进程获取;若是,则表示对应插件的独占锁处于使用状态。优选的,所述若所述m个进程中的各进程检测到所述n个插件中有独占锁处于使用状态的第一插件,则加载所述n个插件中独占锁没有处于使用状态的第二插件,具体包括:若所述m个进程中的各进程检测到所述n个插件中有独占锁处于使用状态的第一插件,在预设时间范围内,所述m个进程中的各进程每隔预设时长检测所述第一插件是否解锁;若在所述预设时间范围内所述m个进程中任一进程最快检测到所述第一插件解锁,则最快检测到所述第一插件解锁的进程获取所述第一插件的独占锁并加载所述第一插件;若在所述预设时间范围外,所述m个进程中的各进程检测到所述第一插件未解锁,则加载所述第二插件或者提示进程加载超时。优选的,所述若所述m个进程中的各进程检测到所述n个插件中有独占锁处于使用状态的第一插件,则加载所述n个插件中独占锁没有处于使用状态的第二插件,具体包括:若检测到所述n个插件中有独占锁处于使用状态的第一插件,所述m个进程中的各进程基于预设检测次数重复检测所述第一插件是否解锁;若在所述预设检测次数内所述m个进程中任一进程最快检测到所述第一插件解锁,则最快检测到所述第一插件解锁的进程获取所述第一插件的独占锁并加载所述第一插件;若在所述预设检测次数达到时,所述m个进程中的各进程检测到所述第一插件未解锁,则加载所述第二插件或者提示进程加载超时。优选的,所述m个进程中的各进程加载所述n个插件中独占锁没有处于使用状态的第二插件,具体包括:所述m个进程中的各进程创建用于读取所述第二插件的文件通道;所述m个进程中的各进程利用各自的文件通道获取所述第二插件的独占锁;若所述m个进程中的第一进程获取到所述第二插件的独占锁,则所述第一进程加载所述第二插件。优选的,所述第一进程加载所述第二插件之后,所述方法还包括:所述第一进程释放所述第二插件的独占锁。优选的,所述m个进程中的各进程创建读取所述第二插件的文件通道,具体包括:所述m个进程中的各进程创建所述第二插件的锁文件,用于放置所述第二插件的独占锁;所述m个进程中的各进程获得所述第二插件的锁文件的输出流;所述m个进程中的各进程获得所述第二插件的文件通道。优选的,所述第一进程加载所述第二插件,具体包括:所述第一进程将所述第二插件中的文件体读取到临时文件;其中,所述第二插件包含文件头和所述文件体;所述第一进程将所述临时文件重命名,成为可读插件;所述第一进程创建所述可读插件的类装载器,以加载所述可读插件;所述第一进程反射所述可读插件的插件入口类,使得所述第一进程和所述可读插件建立连接关系。优选的,所述第一进程释放所述第二插件的独占锁,具体包括:所述第一进程释放用于放置所述第二插件的独占锁的锁文件;所述第一进程关闭所述第二插件的文件通道;所述第一进程关闭所述第二插件的锁文件的输出流;所述第一进程删除所述第二插件的锁文件。本发明的另一个方面,一种终端设备,包括:第一检测模块,用于在m个进程加载n个插件的过程中,通过创建的所述m个进程中的各进程实时检测所述n个插件中的各插件的独占锁是否处于使用状态;其中,各插件利用各自的独占锁进行锁定,所述独占锁用于禁止所属插件响应没有获得所述独占锁的进程的加载请求;m、n为正整数;第一加载模块,用于若所述m个进程中的各进程检测到所述n个插件中有独占锁处于使用状态的第一插件,则通过所述m个进程中的各进程加载所述n个插件中独占锁没有处于使用状态的第二插件。优选的,所述第一检测模块,具体用于通过创建的所述m个进程中的各进程实时检测各插件的独占锁是否被其他进程获取;若是,则表示对应插件的独占锁处于使用状态。优选的,所述第一加载模块,具体包括:第二检测模块,用于若所述m个进程中的各进程检测到所述n个插件中有独占锁处于使用状态的第一插件,在预设时间范围内,通过所述m个进程中的各进程每隔预设时长检测所述第一插件是否解锁;第一获取模块,用于若在所述预设时间范围内所述m个进程中任一进程最快检测到所述第一插件解锁,则通过最快检测到所述第一插件解锁的进程获取所述第一插件的独占锁并加载所述第一插件;第二加载模块,用于若在所述预设时间范围外,通过所述m个进程中的各进程检测到所述第一插件未解锁,则加载所述第二插件或者提示进程加载超时。优选的,所述第一加载模块,具体包括:第三检测模块,用于若检测到所述n个插件中有独占锁处于使用状态的第一插件,通过所述m个进程中的各进程基于预设检测次数重复检测所述第一插件是否解锁;第二获取模块,用于若在所述预设检测次数内所述m个进程中任一进程最快检测到所述第一插件解锁,则通过最快检测到所述第一插件解锁的进程获取所述第一插件的独占锁并加载所述第一插件;第三加载模块,用于若在所述预设检测次数达到时,通过所述m个进程中的各进程检测到所述第一插件未解锁,则加载所述第二插件或者提示进程加载超时。优选的,所述第一加载模块,具体包括:第一读取模块,用于通过所述m个进程中的各进程创建读取所述第二插件的文件通道;第三获取模块,用于通过所述m个进程中的各进程利用各自的文件通道获取所述第二插件的独占锁;第四加载模块,用于若所述m个进程中的第一进程获取到所述第二插件的独占锁,则通过所述第一进程加载所述第二插件。优选的,所述终端设备还包括:释放模块,用于通过所述第一进程释放所述第二插件的独占锁。优选的,所述第一读取模块,具体包括:第一创建模块,用于通过所述m个进程中的各进程创建所述第二插件的锁文件,用于放置所述第二插件的独占锁;第一获得模块,用于通过所述m个进程中的各进程获得所述第二插件的锁文件的输出流;第二获得模块,用于通过所述m个进程中的各进程获得所述第二插件的文件通道。优选的,所述第四加载模块,具体包括:第二读取模块,用于通过所述第一进程将所述第二插件中的文件体读取到临时文件;其中,所述第二插件包含文件头和所述文件体;重命名模块,用于通过所述第一进程将所述临时文件重命名,成为可读插件;第二创建模块,用于通过所述第一进程创建所述可读插件的类装载器,以加载所述可读插件;反射模块,用于通过所述第一进程反射所述可读插件的插件入口类,使得所述第一进程和所述可读插件建立连接关系。优选的,所述释放模块,具体包括:释放子模块,用于通过所述第一进程释放用于放置所述第二插件的独占锁的锁文件;第一关闭模块,用于通过所述第一进程关闭所述第二插件的文件通道;第二关闭模块,用于通过所述第一进程关闭所述第二插件的锁文件的输出流;本发明公开了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述方法的步骤。本发明公开了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述方法的步骤。本申请实施例中提供的技术方案,至少具有如下技术效果或优点:本发明公开了一种加载插件的方法及终端设备,在m个进程加载n个插件的过程中,所述m个进程中的各进程实时检测所述n个插件中的各插件的独占锁是否处于使用状态。n个插件中的每个插件都设置有各自的独占锁,各插件利用各自的独占锁进行锁定,而独占锁的主要作用是禁止所属插件响应没有获得所述独占锁的进程的加载请求,故而,插件的独占锁每次只供一个进程获得,其他进程是不能够调用该插件的。故而若所述m个进程中的各进程检测到所述n个插件中有独占锁处于使用状态的第一插件,则所述m个进程中的各进程加载所述n个插件中独占锁没有处于使用状态的第二插件。由于各插件的独占锁的作用,多个进程不可能同时加载一个插件,故而能够避免出现多个进程同时加载同一个插件进而导致的加载错误的情况出现,并且每个插件在同一时刻只能够允许一个进程使用,进而能够实现多个进程同时加载多个插件的效果。上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。附图说明通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:图1示出了根据本发明一个实施例的一种加载插件的方法的实施过程图;图2示出了根据本发明一个实施例的一种终端设备的示意图。具体实施方式下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。本发明实施例提供了一种加载插件的方法及系统,用以解决现有技术的两个及以上进程同时加载同一个插件导致插件加载错误的技术问题。作为一种可选的实施例,本发明实施例公开了一种加载插件的方法,包括:步骤11,在m个进程加载n个插件的过程中,所述m个进程中的各进程实时检测所述n个插件中的各插件的独占锁是否处于使用状态。其中,m、n为正整数。实时检测的含义是以特定频率检测,例如每秒检测一次或者每0.5秒检测一次等等。在具体的实施过程中,n个插件中的每个插件都有独占锁,各插件利用各自的独占锁进行锁定,所述独占锁用于禁止所属插件响应没有获得所述独占锁的进程的加载请求。也就是说,插件的独占锁每次只供一个进程获得,如果某个进程具有该插件的独占锁,则表示该进程可以使用该插件,其他进程是不能够调用该插件的,独占锁会禁止插件响应其他进程(因为其他进程没有获得独占锁)加载该插件的加载请求。其他进程只能够等该进程调用完毕该插件并且释放了该插件的独占锁之后,才会有获得该插件的独占锁的机会,但是其他进程中也只有一个进程能够获得该独占锁进而调用该插件,剩余插件又需要进一步等待获得独占锁的进程使用完毕,才能够进一步竞争该插件的使用权。故而,在每个插件中加入独占锁,就可以使得各插件每次只能够响应一个进程(该进程是获得该插件的独占锁的进程)的调用,而禁止响应其他进程的调用。而对于其他进程来说,要么等待该插件,要么加载其他独占锁没有被使用的插件。如果有多个进程,则由于各插件的独占锁的作用,多个进程不可能同时加载一个插件,故而能够避免出现加载错误的情况,并且每个插件在同一时刻只能够允许一个进程使用,进而能够实现多个进程同时加载多个插件的效果。在具体的实施过程中,m个进程中的各进程实时检测所述n个插件中的各插件的独占锁是否处于使用状态,具体包括:所述m个进程中的各进程实时检测各插件的独占锁是否被其他进程获取;若是,则表示对应插件的独占锁处于使用状态。也就是说,如果独占锁被某个进程获取,则表示对应的插件处于使用状态,那么该插件则不会响应其他进程的加载请求。步骤12,若所述m个进程中的各进程检测到所述n个插件中有独占锁处于使用状态的第一插件,则所述m个进程中的各进程加载所述n个插件中独占锁没有处于使用状态的第二插件。在具体的实施过程中,如果各进程检测到第一插件的独占锁已经被某个进程获取,那么则表示该第一插件处于使用状态,则各进程会转而加载独占锁没有处于使用状态的其他插件(也即第二插件)。当然,在加载的过程中,这些进程中,一个进程只能够加载成功一个第二插件。作为一种可选的实施例,本发明在加载所述n个插件中独占锁没有处于使用状态的第二插件的过程中,还会在进程可允许等待的范围(时间范围、次数范围等等)里,判断第一插件是否被使用完毕。如果第一插件使用完毕,则在等待加载第一插件的进程可以加载第一插件。如果第一插件在进程可允许范围外还处于使用状态,则进程为了节约时间,也可以去加载第二插件,或者提示进程加载超时。在具体的实施过程中,进程可以利用时间范围作为判断标准来判断第一插件,也可以利用预设次数作为判断标准来判断第一插件,下面请看具体的描述。第一种方式是,若所述m个进程中的各进程检测到所述n个插件中有独占锁处于使用状态的第一插件,在预设时间范围内,所述m个进程中的各进程每隔预设时长检测所述第一插件是否解锁;若在预设时间范围内所述m个进程中任一进程最快检测到所述第一插件解锁,则最快检测到所述第一插件解锁的进程获取所述第一插件的独占锁并加载所述第一插件;若在预设时间范围外,所述m个进程中的各进程检测到所述第一插件未解锁,则加载所述第二插件或者提示进程加载超时。举例来说,假设2个进程加载第一插件,进程1是成功获得第一插件的独占锁并使用第一插件的进程,当进程1成功加载第一插件之后,进程2则会在预设时间范围5秒内,每隔1秒检测第一插件是否解锁,若在5秒内检测到第一插件解锁,则表示进程1已经加载使用完毕该第一插件,那么则进程2可以加载第一插件。如果5秒之后第一插件还处于未解锁状态,则表示进程1还在使用第一插件,那么进程2则会加载第二插件或者提示加载超时。当然,以上是两个进程加载同一个插件产生的实施过程,如果是三个或以上进程,则会出现被其他进程抢先加载到第一插件的情况,那么剩余的进程则会在各自的预设时间范围内继续判断第一插件的使用情况,如果剩余进程中的任一进程最快检测到所述第一插件解锁,则最快检测到所述第一插件解锁的进程获取所述第一插件的独占锁并加载所述第一插件;若检测到所述第一插件未解锁,则加载所述第二插件或者是进程超时。举例来说,假设有3个进程加载第一插件,进程1是成功获得第一插件的独占锁并使用第一插件的进程,进程2和进程3则会实时检测第一插件的使用状态,如果进程2和进程3还想使用该第一插件,则会在预设时间范围5秒内,每隔1秒检测第一插件是否解锁(当然进程2和进程3有各自的预设时间范围,时间范围的数值也可以不同,比如进程的预设时间范围为2两秒,进程3的预设时间范围为5秒等等)。若在5秒内检测到第一插件解锁(例如3秒的时候检测到第一插件解锁),则表示进程1已经加载使用完毕该第一插件,那么则进程2和进程3可以加载第一插件,当然,这两个进程也只有最快检测到第一插件解锁的进程能够加载成功,假设进程2加载成功第一插件,那么进程3会在剩余的2秒内继续检测第一插件是否解锁,如果5秒内第一插件解锁了,则加载第一插件。如果超过5秒第一插件还未解锁,则进程3加载第二插件或者显示加载超时。第二种方式是,若所述m个进程中的各进程检测到所述n个插件中有独占锁处于使用状态的第一插件,则加载所述n个插件中独占锁没有处于使用状态的第二插件,具体包括:若检测到所述n个插件中有独占锁处于使用状态的第一插件,所述m个进程中的各进程基于预设检测次数重复检测所述第一插件是否解锁;若在所述预设检测次数内所述m个进程中任一进程最快检测到所述第一插件解锁,则最快检测到所述第一插件解锁的进程获取所述第一插件的独占锁并加载所述第一插件;若在预设检测次数达到时,所述m个进程中的各进程检测到所述第一插件未解锁,则加载所述第二插件或者提示进程加载超时。举例来说,假设2个进程加载第一插件,进程1是成功获得第一插件的独占锁并使用第一插件的进程,当进程1成功加载第一插件之后,进程2则会在预设检测次数5次,检测第一插件是否解锁,若在5次内检测到第一插件解锁,则表示进程1已经加载使用完毕该第一插件,那么则进程2可以加载第一插件。如果检测5次之后第一插件还处于未解锁状态,则表示进程1还在使用第一插件,那么进程2则会加载第二插件或者提示进程加载超时。当然,不管是一个进程还是多个进程在检测第一插件,只要各进程在各自的预设检测次数内检测到第一插件解锁,则可以竞争加载第一插件,如果检测到第一插件未解锁,则加载第二插件或者显示加载超时。各插件的检测过程和其他的插件并无关联,只需要在自己的预设范围内检测第一插件是否解锁即可。而作为一种可选的实施例,m个进程中的各进程加载所述n个插件中独占锁没有处于使用状态的第二插件,具体包括:首先,m个进程中的各进程创建读取所述第二插件的文件通道。其次,m个进程中的各进程获取所述第二插件的独占锁。当然,在这m个进程只有一个进程能够获得第二插件的独占锁,本发明实施例将获得第二插件的独占锁的进程命名为第一进程,故而,若所述m个进程中的第一进程获取到所述第二插件的独占锁,则执行所述第一进程加载所述第二插件的步骤。而在各进程在加载第二插件时,各进程都需要创建和第二插件沟通的文件通道。文件通道filechannel是用于连接文件的通道,通过它可以读、写文件的数据。创建了文件通道才能够进一步通向第二插件,进而获得第二插件的独占锁。故而不管获取独占锁能不能成功,每个进程都需要建立各自的文件通道。而在各进程创建文件通道的过程中,会执行下面的步骤:所述m个进程中的各进程创建所述第二插件的锁文件,用于放置所述第二插件的独占锁。创建锁文件的代码实现:filefile=newfile(pluginlockname)。所述m个进程中的各进程获得所述第二插件的锁文件的输出流。拿到锁文件的输出流fileoutputstream的代码实现:fileoutputstreamout=context.openfileoutput(filename,0)。所述m个进程中的各进程获得所述第二插件的文件通道。获取第二插件的文件通道filechannel的代码实现:创建文件通道之后,各进程都会去利用各自的文件通道尝试获得第二插件的独占锁,但是,只有第一进程成功获得了第二插件的独占锁。而在各进程获取第二插件的独占锁的过程中,会利用下述代码实现:filelock=filechannel.trylock(),也就是说,各进程都会通过各自的文件通道去获得独占锁,而trylock()是非阻塞的,它会试着去获取这个锁,如果得到,就独占该插件,如果得不到(其它进程已经以独占方式得到这个锁了),那它就直接返回。而当第一进程成功获得了第二插件的独占锁,则会加载第二插件。第一进程加载所述第二插件,具体包括下述实施过程:所述第一进程将所述第二插件中的文件体读取到临时文件。其中,所述第二插件包含文件头和所述文件体。所述第一进程将所述临时文件重命名,成为可读插件。所述第一进程创建所述可读插件的类装载器,以加载所述可读插件。所述第一进程反射所述可读插件的插件入口类,使得所述第一进程和所述第二插件建立连接关系。第二插件,是从服务器下发的一个文件,其格式:文件头文件体(真正的可用插件)而加载第二插件时,首先会释放第二插件,从首先找到服务器下发的插件文件,根据以上对插件格式的描述,我们知道,这个下发的插件文件其实是:文件头+文件体。所以,首先,要从这个插件文件中,把真正的可用插件提取出来,并释放到本地目录下,转化为可读插件。释放过程是:舍弃所有文件头,把文件体读取到一个临时文件plugin.tmp,然后再把这个临时文件rename成可读插件,这是一个典型的io操作,即:源文件→临时文件plugin.tmp→可读插件。创建所述可读插件的类装载器的过程中,创建插件的dexclassloader,这样我们才能使用插件中的类。当然,在不同版本的android虚拟机上,逻辑会有不同:dalvik虚拟机:会执行dexopt命令,生成odex文件。art虚拟机:会执行dex2oat命令,生成oat文件。另外,在执行过程中,也存在io输入输出操作,因为生成的文件是需要写到本地目录的。进一步的,在创建所述可读插件的类装载器之后,就会反射所述可读插件的插件入口类,使得所述第一进程和所述第二插件建立连接关系。进而,第一进程可以读取可读插件进行处理。而在第一进程加载所述第二插件之后,所述方法还包括:所述第一进程释放所述第二插件的独占锁。释放第二插件的独占锁的目的是为了解锁第二插件,进而供其他进程加载第二插件。而在释放所述第二插件的独占锁的具体实施过程中,会执行下述方案:所述第一进程释放用于放置所述第二插件的独占锁的锁文件。实现代码为:filelock.release()。所述第一进程关闭所述第二插件的文件通道。实现代码为:mfilechannel.close()。所述第一进程关闭所述第二插件的锁文件的输出流。实现代码为:fileoutputstream.close()。所述第一进程删除所述第二插件的锁文件。实现代码为:lockfile.delete()。以上便是本发明实施例中加载插件的方法的实施过程,基于统一发明构思,下面的实施例公开了一种终端设备。参看图2,是公开的一种终端设备的示意图,包括:第一检测模块21,用于在m个进程加载n个插件的过程中,通过创建的所述m个进程中的各进程实时检测所述n个插件中的各插件的独占锁是否处于使用状态;其中,各插件利用各自的独占锁进行锁定,所述独占锁用于禁止所属插件响应没有获得所述独占锁的进程的加载请求;m、n为正整数;第一加载模块22,用于若所述m个进程中的各进程检测到所述n个插件中有独占锁处于使用状态的第一插件,则通过所述m个进程中的各进程加载所述n个插件中独占锁没有处于使用状态的第二插件。作为一种可选的实施例,所述第一检测模块21,具体用于通过创建的所述m个进程中的各进程实时检测各插件的独占锁是否被其他进程获取;若是,则表示对应插件的独占锁处于使用状态。作为一种可选的实施例,所述第一加载模块22,具体包括:第二检测模块,用于若所述m个进程中的各进程检测到所述n个插件中有独占锁处于使用状态的第一插件,在预设时间范围内,通过所述m个进程中的各进程每隔预设时长检测所述第一插件是否解锁;第一获取模块,用于用于若在所述预设时间范围内所述m个进程中任一进程最快检测到所述第一插件解锁,则通过最快检测到所述第一插件解锁的进程获取所述第一插件的独占锁并加载所述第一插件;第二加载模块,用于若在所述预设时间范围外,通过所述m个进程中的各进程检测到所述第一插件未解锁,则加载所述第二插件或者提示进程加载超时。作为一种可选的实施例,所述第一加载模块22,具体包括:第三检测模块,用于若检测到所述n个插件中有独占锁处于使用状态的第一插件,通过所述m个进程中的各进程基于预设检测次数重复检测所述第一插件是否解锁;第二获取模块,用于若在所述预设检测次数内所述m个进程中任一进程最快检测到所述第一插件解锁,则通过最快检测到所述第一插件解锁的进程获取所述第一插件的独占锁并加载所述第一插件;第三加载模块,用于若在所述预设检测次数达到时,通过所述m个进程中的各进程检测到所述第一插件未解锁,则加载所述第二插件或者提示进程加载超时。作为一种可选的实施例,所述第一加载模块22,具体包括:第一读取模块,用于通过所述m个进程中的各进程创建读取所述第二插件的文件通道;第三获取模块,用于通过所述m个进程中的各进程利用各自的文件通道获取所述第二插件的独占锁;第四加载模块,用于若所述m个进程中的第一进程获取到所述第二插件的独占锁,则通过所述第一进程加载所述第二插件。作为一种可选的实施例,所述终端设备还包括:释放模块,用于通过所述第一进程释放所述第二插件的独占锁。作为一种可选的实施例,所述第一读取模块,具体包括:第一创建模块,用于通过所述m个进程中的各进程创建所述第二插件的锁文件,用于放置所述第二插件的独占锁;第一获得模块,用于通过所述m个进程中的各进程获得所述第二插件的锁文件的输出流;第二获得模块,用于通过所述m个进程中的各进程获得所述第二插件的文件通道。作为一种可选的实施例,所述第四加载模块,具体包括:第二读取模块,用于通过所述第一进程将所述第二插件中的文件体读取到临时文件;其中,所述第二插件包含文件头和所述文件体;重命名模块,用于通过所述第一进程将所述临时文件重命名,成为可读插件;第二创建模块,用于通过所述第一进程创建所述可读插件的类装载器,以加载所述可读插件;反射模块,用于通过所述第一进程反射所述可读插件的插件入口类,使得所述第一进程和所述可读插件建立连接关系。作为一种可选的实施例,所述释放模块,具体包括:释放子模块,用于通过所述第一进程释放用于放置所述第二插件的独占锁的锁文件;第一关闭模块,用于通过所述第一进程关闭所述第二插件的文件通道;第二关闭模块,用于通过所述第一进程关闭所述第二插件的锁文件的输出流;删除模块,用于通过所述第一进程删除所述第二插件的锁文件。基于与前述实施例中同样的发明构思,本发明实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现前文任一所述方法的步骤。基于与前述实施例中同样的发明构思,本发明实施例还提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现前文任一所述方法的步骤。本申请实施例中提供的技术方案,至少具有如下技术效果或优点:本发明公开了一种加载插件的方法及终端设备,在m个进程加载n个插件的过程中,所述m个进程中的各进程实时检测所述n个插件中的各插件的独占锁是否处于使用状态。n个插件中的每个插件都设置有各自的独占锁,各插件利用各自的独占锁进行锁定,而独占锁的主要作用是禁止所属插件响应没有获得所述独占锁的进程的加载请求,故而,插件的独占锁每次只供一个进程获得,其他进程是不能够调用该插件的。故而若所述m个进程中的各进程检测到所述n个插件中有独占锁处于使用状态的第一插件,则所述m个进程中的各进程加载所述n个插件中独占锁没有处于使用状态的第二插件。由于各插件的独占锁的作用,多个进程不可能同时加载一个插件,故而能够避免出现多个进程同时加载同一个插件进而导致的加载错误的情况出现,并且每个插件在同一时刻只能够允许一个进程使用,进而能够实现多个进程同时加载多个插件的效果。在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。此外,本领域的技术人员能够理解,尽管在此的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(dsp)来实现根据本发明实施例的网关、代理服务器、系统中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。本发明公开了,a1、一种加载插件的方法,其特征在于,包括:在m个进程加载n个插件的过程中,所述m个进程中的各进程实时检测所述n个插件中的各插件的独占锁是否处于使用状态;其中,各插件利用各自的独占锁进行锁定,所述独占锁用于禁止所属插件响应没有获得所述独占锁的进程的加载请求;m、n为正整数;若所述m个进程中的各进程检测到所述n个插件中有独占锁处于使用状态的第一插件,则所述m个进程中的各进程加载所述n个插件中独占锁没有处于使用状态的第二插件。a2、如a1所述的方法,其特征在于,所述m个进程中的各进程实时检测所述n个插件中的各插件的独占锁是否处于使用状态,具体包括:所述m个进程中的各进程实时检测各插件的独占锁是否被其他进程获取;若是,则表示对应插件的独占锁处于使用状态。a3、如a1所述的方法,其特征在于,所述若所述m个进程中的各进程检测到所述n个插件中有独占锁处于使用状态的第一插件,则加载所述n个插件中独占锁没有处于使用状态的第二插件,具体包括:若所述m个进程中的各进程检测到所述n个插件中有独占锁处于使用状态的第一插件,在预设时间范围内,所述m个进程中的各进程每隔预设时长检测所述第一插件是否解锁;若在所述预设时间范围内所述m个进程中任一进程最快检测到所述第一插件解锁,则最快检测到所述第一插件解锁的进程获取所述第一插件的独占锁并加载所述第一插件;若在所述预设时间范围外,所述m个进程中的各进程检测到所述第一插件未解锁,则加载所述第二插件或者提示进程加载超时。a4、如a1所述的方法,其特征在于,所述若所述m个进程中的各进程检测到所述n个插件中有独占锁处于使用状态的第一插件,则加载所述n个插件中独占锁没有处于使用状态的第二插件,具体包括:若检测到所述n个插件中有独占锁处于使用状态的第一插件,所述m个进程中的各进程基于预设检测次数重复检测所述第一插件是否解锁;若在所述预设检测次数内所述m个进程中任一进程最快检测到所述第一插件解锁,则最快检测到所述第一插件解锁的进程获取所述第一插件的独占锁并加载所述第一插件;若在所述预设检测次数达到时,所述m个进程中的各进程检测到所述第一插件未解锁,则加载所述第二插件或者提示进程加载超时。a5、如a1所述的方法,其特征在于,所述m个进程中的各进程加载所述n个插件中独占锁没有处于使用状态的第二插件,具体包括:所述m个进程中的各进程创建用于读取所述第二插件的文件通道;所述m个进程中的各进程利用各自的文件通道获取所述第二插件的独占锁;若所述m个进程中的第一进程获取到所述第二插件的独占锁,则所述第一进程加载所述第二插件。a6、如a5所述的方法,其特征在于,所述第一进程加载所述第二插件之后,所述方法还包括:所述第一进程释放所述第二插件的独占锁。a7、如a5所述的方法,其特征在于,所述m个进程中的各进程创建读取所述第二插件的文件通道,具体包括:所述m个进程中的各进程创建所述第二插件的锁文件,用于放置所述第二插件的独占锁;所述m个进程中的各进程获得所述第二插件的锁文件的输出流;所述m个进程中的各进程获得所述第二插件的文件通道。a8、如a5所述的方法,其特征在于,所述第一进程加载所述第二插件,具体包括:所述第一进程将所述第二插件中的文件体读取到临时文件;其中,所述第二插件包含文件头和所述文件体;所述第一进程将所述临时文件重命名,成为可读插件;所述第一进程创建所述可读插件的类装载器,以加载所述可读插件;所述第一进程反射所述可读插件的插件入口类,使得所述第一进程和所述可读插件建立连接关系。a9、如a6所述的方法,其特征在于,所述第一进程释放所述第二插件的独占锁,具体包括:所述第一进程释放用于放置所述第二插件的独占锁的锁文件;所述第一进程关闭所述第二插件的文件通道;所述第一进程关闭所述第二插件的锁文件的输出流;所述第一进程删除所述第二插件的锁文件。b10、一种终端设备,其特征在于,包括:第一检测模块,用于在m个进程加载n个插件的过程中,通过创建的所述m个进程中的各进程实时检测所述n个插件中的各插件的独占锁是否处于使用状态;其中,各插件利用各自的独占锁进行锁定,所述独占锁用于禁止所属插件响应没有获得所述独占锁的进程的加载请求;m、n为正整数;第一加载模块,用于若所述m个进程中的各进程检测到所述n个插件中有独占锁处于使用状态的第一插件,则通过所述m个进程中的各进程加载所述n个插件中独占锁没有处于使用状态的第二插件。b11、如b10所述的终端设备,其特征在于,所述第一检测模块,具体用于通过创建的所述m个进程中的各进程实时检测各插件的独占锁是否被其他进程获取;若是,则表示对应插件的独占锁处于使用状态。b12、如b10所述的终端设备,其特征在于,所述第一加载模块,具体包括:第二检测模块,用于若所述m个进程中的各进程检测到所述n个插件中有独占锁处于使用状态的第一插件,在预设时间范围内,通过所述m个进程中的各进程每隔预设时长检测所述第一插件是否解锁;第一获取模块,用于若在所述预设时间范围内所述m个进程中任一进程最快检测到所述第一插件解锁,则通过最快检测到所述第一插件解锁的进程获取所述第一插件的独占锁并加载所述第一插件;第二加载模块,用于若在所述预设时间范围外,通过所述m个进程中的各进程检测到所述第一插件未解锁,则加载所述第二插件或者提示进程加载超时。b13、如b10所述的终端设备,其特征在于,所述第一加载模块,具体包括:第三检测模块,用于若检测到所述n个插件中有独占锁处于使用状态的第一插件,通过所述m个进程中的各进程基于预设检测次数重复检测所述第一插件是否解锁;第二获取模块,用于若在所述预设检测次数内所述m个进程中任一进程最快检测到所述第一插件解锁,则通过最快检测到所述第一插件解锁的进程获取所述第一插件的独占锁并加载所述第一插件;第三加载模块,用于若在所述预设检测次数达到时,通过所述m个进程中的各进程检测到所述第一插件未解锁,则加载所述第二插件或者提示进程加载超时。b14、如b10所述的终端设备,其特征在于,所述第一加载模块,具体包括:第一读取模块,用于通过所述m个进程中的各进程创建读取所述第二插件的文件通道;第三获取模块,用于通过所述m个进程中的各进程利用各自的文件通道获取所述第二插件的独占锁;第四加载模块,用于若所述m个进程中的第一进程获取到所述第二插件的独占锁,则通过所述第一进程加载所述第二插件。b15、如b14所述的终端设备,其特征在于,所述终端设备还包括:释放模块,用于通过所述第一进程释放所述第二插件的独占锁。b16、如b14所述的终端设备,其特征在于,所述第一读取模块,具体包括:第一创建模块,用于通过所述m个进程中的各进程创建所述第二插件的锁文件,用于放置所述第二插件的独占锁;第一获得模块,用于通过所述m个进程中的各进程获得所述第二插件的锁文件的输出流;第二获得模块,用于通过所述m个进程中的各进程获得所述第二插件的文件通道。b17、如b14所述的终端设备,其特征在于,所述第四加载模块,具体包括:第二读取模块,用于通过所述第一进程将所述第二插件中的文件体读取到临时文件;其中,所述第二插件包含文件头和所述文件体;重命名模块,用于通过所述第一进程将所述临时文件重命名,成为可读插件;第二创建模块,用于通过所述第一进程创建所述可读插件的类装载器,以加载所述可读插件;反射模块,用于通过所述第一进程反射所述可读插件的插件入口类,使得所述第一进程和所述可读插件建立连接关系。b18、如b15所述的终端设备,其特征在于,所述释放模块,具体包括:释放子模块,用于通过所述第一进程释放用于放置所述第二插件的独占锁的锁文件;第一关闭模块,用于通过所述第一进程关闭所述第二插件的文件通道;第二关闭模块,用于通过所述第一进程关闭所述第二插件的锁文件的输出流;删除模块,用于通过所述第一进程删除所述第二插件的锁文件。c19、一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现a1-a9任一项所述方法的步骤。c20、一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现a1-a9任一项所述方法的步骤。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1