Java资源访问的同步方法和装置的制作方法

文档序号:6437582阅读:158来源:国知局
专利名称:Java资源访问的同步方法和装置的制作方法
技术领域
本发明涉及Java资源访问,特别涉及Java资源访问的同步方法和装置。
背景技术
目前,多核和多线程服务器的应用成为主流。Java作为服务器应用的主要开发语言之一,能够实现和管理多线程应用程序,Java利用监控器(Monitor)机制实现了线程同步。图1示出现有技术Java资源访问的监控器模型,用于数据保护的监控器包括了三个部分,入口区、拥有区和等待区,入口区和等待区内可能有多个线程,但是任何时刻最多只有一个线程拥有该监控器。线程对监控器的操作原语如下:-“进入”监控器指线程进入入口区,准备获取监控器,此时如果没有别的线程拥有该监控器,则这个线程拥有此监控器,否则它要在入口区等待;

-“获取”监控器指在入口区和等待区的线程按照某种策略机制被选择可拥有该监控器时的操作;-“拥有”监控器的线程在它拥有该监控器的时候排他地占有它,从而阻止其它线程的进入;-“释放”监控器拥有锁监控器的线程执行完监控器范围内的代码或异常退出之后,要释放掉它所拥有的此监控器。监控器对线程的调度原则是:一次至多一个线程能够在临界区内;不能让一个线程无限地留在临界区;不能强迫一个线程无限地等待进入临界区;不能因所选的调度策略而造成线程的饥饿(Starving),甚至死锁(Dead Lock),对于生产者线程和消费者线程的模型,同一时间内只能有一个生产者线程生产,同一时间内只能有一个消费者线程消费,生产者线程生产的同时消费者线程不能消费,资源集合满时生产者线程不能继续生产,资源集合空时消费者线程不能继续消费。然而,现有技术的监控器机制实现的线程同步不能区分等待线程的类型,而是从等待线程中随机选择一个线程使其获得监控器,例如,对于生产者和消费者的模型,在资源集合中存在可用资源但不存在可用空间时,如果随机选择的是生产者线程,此时需要向资源集合中增加资源的生产者线程就无法获得监控器。而在资源集合中存在可用空间但不存在可用资源时,如果随机选择的是消费者线程,此时需要从资源集合中获得资源的消费者线程就无法获得监控器,从而使资源集合的访问性能降低,且无法扩展到较大规模的系统。在多阶段Java服务应用中存在很多队列或类似队列的资源集合,线程对资源集合访问的效率对整个应用的性能和可扩展能力至关重要。因此需要一种在高效的Java资源的同步访问机制。

发明内容
基于上述问题,本发明提供一种在Java多线程环境下的资源访问的同步方法和
装直。
根据本发明的第一方面,提供一种Java资源访问的同步方法的方法,该方法包括:为资源集合的第一访问接口配置第一监控器和为第二访问接口配置第二监控器;为第一监控器配置第一等待队列和为第二监控器配置第二等待队列;响应于第一访问接口接收到线程对资源的访问请求,第一监控器查询资源集合中是否有资源满足该访问请求;响应于查询结果为是,该线程获得资源并通知第二监控器唤醒第二等待队列中的线程;响应于查询结果为否,该第一监控器将该线程放入第一等待队列进行排队。根据本发明的第二方面,提供一种Java资源访问的同步装置,该装置包括:监控器配置模块,被配置成为资源集合的第一访问接口配置第一监控器和为第二访问接口配置第二监控器;等待队列配置模块,被配置成为第一监控器配置第一等待队列和为第二监控器配置第二等待队列;查询模块,被配置成响应于第一访问接口接收到线程对资源的访问请求,第一监控器查询资源集合中是否有资源满足该访问请求;同步模块,被配置成响应于查询结果为是,该线程获得资源并通知第二监控器唤醒第二等待队列中的线程;排队模块,被配置成响应于查询结果为否,该第一监控器将该线程放入第一等待队列进行排队。根据本发明的实施例的的Java资源访问的同步方法和装置,能够高效、准确阻塞和唤醒资源请求线程的Java资源的同步访问机制,对提升整个应用的性能和可扩展能力至关重要。


结合附图,通过参考下列的实施例详细描述在Java多线程环境下的资源访问的同步方法和装置,将会更好地理解本发明本身、优选的实施方式以及本发明的目的和优点,其中:图1示出现有技术Java资源访问的监控器模型;图2示出根据本发明实施例的Java资源访问的同步方法;图3示出根据本发明的一个实施例的Java资源访问的同步方法;图4示出根据本发明的另一个实施例的Java资源访问的同步方法;图5示出根据本发明实施例的Java资源访问的同步机制示意图;图6示出根据本发明实施例的Java资源访问的同步机制流程图;图7示出根据本发明的实施例的Java资源访问的同步装置框图;以及图8示出了可以实现根据本发明的实施例的计算设备的结构方框图。
具体实施例方式以下结合附图描述根据本发明实施例的一种Java资源访问的同步方法和装置,将会更好地理解本发明的目的和优点。图2示出根据本发明实施例的Java资源访问的同步方法,在步骤S201,为资源集合的第一访问接口配置第一监控器和为第二访问接口配置第二监控器;在步骤S202,为第一监控器配置第一等待队列和为第二监控器配置第二等待队列;在步骤S203,响应于第一访问接口接收到线程对资源的访问请求,第一监控器查询资源集合中是否有资源满足该访问请求;在步骤S204,响应于查询结果为是,该线程获得资源并通知第二监控器唤醒第二等待队列中的线程;在步骤S205,响应于查询结果为否,该第一监控器将该线程放入第一等待队列进行排队。在步骤S201,为资源集合的第一访问接口配置第一监控器和为第二访问接口配置第二监控器,有多个访问接口访问Java资源集合,根据本发明的实施例,将Java资源集合的多个访问接口进行分类,例如分为生产者类型的访问接口和消费者类型的访问接口,根据线程的方法调用将线程分为生产者线程和消费者线程,生产者线程通过生产者类型的访问接口向资源集合中增加资源,消费者线程通过消费者类型的访问接口从资源集合获取资源。在步骤S202,为第一监控器配置第一等待队列和为第二监控器配置第二等待队列,等待队列由监控器进行管理,在线程无法获得请求的资源时,根据线程的类型由各自的监控器放置在不同的等待队列中,例如,将生产者线程放置在一个等待队列中,将消费者线程放置在另一个等待队列中,等待监控器唤醒,防止生产者线程和消费者线程沉睡。在步骤S203,响应于第一访问接口接收到线程对资源的访问请求,第一监控器查询资源集合中是否有资源满足该访问请求,根据本发明的实施例,对于生产者线程而言,请求的是资源集合的可用空间,对于消费者线程而言,请求的是资源集合中的数据;在步骤S204,响应于查询结果为是,该线程获得资源并通知第二监控器唤醒第二等待队列中的线程;在步骤S205,响应于查询结果为否,该第一监控器将该线程放入第一等待队列进行排队。图3示出根据本发明的一个实施例的Java资源访问的同步方法,其中所述第一访问接口是生产者类型的访问接口以及第二访问接口是消费者类型的访问接口,并且所述第一等待队列包括生产者线程以及第二等待队列包括消费者线程。在步骤S301,为资源集合的第一访问接口配置第一监控器和为第二访问接口配置第二监控器。在步骤S302,为第一监控器配置第一等待队列和为第二监控器配置第二等待队列。在步骤S303,响应于第一访问接口接收到线程对资源集合的访问请求,第一监控器查询资源集合中是否有请求资源进一步包括响应于第一访问接口接收到线程对可用空间的访问请求,第一监控器查询资源集合中是否有可用空间,由线程调用第一监控器来查询资源集合中是否有可用空间。在步骤S304,响应于查询结果为是,该线程获得资源并由该线程通知第二监控器唤醒第二等待队列中的线程进一步包括该线程获得资源集合中的可用空间并向获得的可用空间增加数据;以及由该线程唤醒第二等待队列中的线程来获取资源集合中增加的数据。在步骤S305,响应于查询结果为否,该第一监控器将该线程放入第一等待队列进行排队,等待资源集合释放出可用空间。图4示出根据本发明的另一个实施例的Java资源访问的同步方法,其中所述第一访问接口是消费者类型的访问接口以及第二访问接口是生产者类型的访问接口,其中所述第一等待队列包括消费者线程以及第二等待队列包括生产者线程。在步骤S401,为资源集合的第一访问接口配置第一监控器和为第二访问接口配置第二监控器。在步骤S402,为第一监控器配置第一等待队列和为第二监控器配置第二等待队列。在步骤S403,响应于第一访问接口接收到线程对资源集合的访问请求,第一监控器查询资源集合中是否有请求资源进一步包括:响应于第一访问接口接收到线程对数据的访问请求,第一监控器查询资源集合中是否有数据。在步骤S404,响应于查询结果为是,该线程获得资源集合中的数据,由该线程通知第二监控器唤醒第二等待队列中的线程来获取资源集合中释放的可用空间,具体地,如果第一监控器查询到资源集合有数据,该线程获得资源集合中的数据,资源集合释放出可用空间,与此同时,该线程通知第二监控器唤醒第二等待队列中的线程来获取资源集合中释放的可用空间。在步骤S405,响应于查询结果为否,该第一监控器将该线程放入第一等待队列进行排队。图5示出根据本发明实施例的Java资源访问的同步机制示意图,如图所示,所述同步机制针对不同的访问接口配置了多个监控器,根据线程方法调用的类型对线程进行分类,根据本发明的实施例,将线程分为生产者线程和消费者线程,生产者线程P1、P2和?3通过第一访问接口向资源集合中增加资源,即增加数据,消费者线程Cl、C2和C3通过第二访问接口从资源集合中获得资源,即获得数据,按照线程的类型划分为不同的等待队列,例如第一等待队列包括生产者线程以及第二等待队列包括消费者线程。图6示出根据本发明实施例的Java资源访问的同步机制流程图。首先在步骤S601,将访问接口分为生产者类型的访问接口和消费者类型的访问接口;在步骤S602,为生产者类型的访问接口配置第一监控器和为消费者类型的访问接口配置第二监控器;在步骤S603,为第一监控器配置第一等待队列和为第二监控器配置第二等待队列。在步骤S604,判断接收到的资源访问请求来自生产者线程还是消费者线程?如果是生产者线程,则前进至步骤S605,生产者线程在第一监控器上注册;在步骤S606,第一监控器查询资源集合是否有可用空间;如果查询结果为是,则前进至步骤S607,该线程获得资源集合中的可用空间并向获得的可用空间增加数据,以及该线程通知第二监控器唤醒第二等待队列中的线程来获得数据,过程结束。如果查询结果为否,则在步骤S608,该第一监控器将该线程放入第一等待队列进行排队,过程结束。如果是消费者线程,则前进至步骤S609,该消费者线程在第二监控器上注册;在步骤S610,第二监控器查询资源集合是否有数据;如果查询结果为是,则前进至步骤S611,该线程获得资源集合中的数据,资源集合释放掉可用空间,以及该线程通知第一监控器唤醒第一等待队列中的线程来获得可用空间,过程结束。如果查询结果为否,则在步骤S612,该第二监控器将该线程放入第二等待队列进行排队,过程结束。本发明为不同类型的访问接口分别配置了监控器,利用监控器分别唤醒不同等待队列中的生产者线程和消费者线程,防止生产者线程和消费者线程沉睡,降低系统响应时间,提闻资源访问效率。基于同一发明构思,本发明提出一种Java资源访问的同步装置,图7示出根据本发明的实施例的Java资源访问的同步装置,该装置包括:一种Java资源访问的同步装置,包括:监控器配置模块701,被配置成为资源集合的第一访问接口配置第一监控器和为第二访问接口配置第二监控器;等待队列配置模块702,被配置成为第一监控器配置第一等待队列和为第二监控器配置第二等待队列;查询模块703,被配置为响应于第一访问接口接收到线程对资源的访问请求,第一监控器查询资源集合中是否有资源满足该访问请求;同步模块704,被配置成响应于查询结果为是,该线程获得资源并通知第二监控器唤醒第二等待队列中的线程;排队模块705,被配置成响应于查询结果为否,该第一监控器将该线程放入第一等待队列进行排队。根据本发明的一个实施例,其中所述第一访问接口是生产者类型的访问接口以及第二访问接口是消费者类型的访问接口,其中所述第一等待队列包括生产者线程以及第二等待队列包括消费者线程。根据本发明的实施例,其中查询模块进一步被配置为:响应于第一访问接口接收到线程对可用空间的访问请求,第一监控器查询资源集合中是否有可用空间。同步模块被进一步配置为:线程获得资源集合中的可用空间并向获得的可用空间增加数据;由该线程唤醒第二等待队列中的线程来获取资源集合中增加的数据。根据本发明的另一个实施例,其中所述第一访问接口是消费者类型的访问接口以及第二访问接口是生产者类型的访问接口,其中所述第一等待队列包括消费者线程以及第二等待队列包括生产者线程。其中查询模块被进一步配置为:响应于第一访问接口接收到线程对数据的访问请求,第一监控器查询资源集合中是否有数据。同步模块被进一步配置为:响应于查询结果为是,该线程获得资源集合中的数据;资源集合释放出可用空间;由该线程通知第二监控器唤醒第二等待队列中的线程来获取资源集合中释放的可用空间。图8则示意性示出了可以实现根据本发明的实施例的计算设备的结构方框图。图8中所示的计算机系统包括CPU (中央处理单元)801、RAM (随机存取存储器)802、ROM (只读存储器)803、系统总线804,硬盘监控器805、键盘监控器806、串行接口监控器807、并行接口监控器808、显示器监控器809、硬盘810、键盘811、串行外部设备812、并行外部设备813和显示器814。在这些部件中,与系统总线804相连的有CPU 801、RAM802、R0M803、硬盘监控器805、键盘监控器806,串行接口监控器807,并行接口监控器808和显示器监控器809。硬盘810与硬盘监控器805相连,键盘811与键盘监控器806相连,串行外部设备812与串行接口监控器807相连,并行外部设备813与并行接口监控器808相连,以及显示器814与显示器监控器809相连。图8中每个部件的功能在本技术领域内都是众所周知的,并且图8所示的结构也是常规的。这种结构不仅用于个人计算机,而且用于手持设备,如Palm PC、PDA(个人数据助理)、移动电话等等。在不同的应用中,例如用于实现包含有根据本发明的客户端模块的用户终端或者包含有根据本发明的网络应用服务器的服务器主机时,可以向图8中所示的结构添加某些部件,或者图8中的某些部件可以被省略。图8中所示的整个系统由通常作为软件存储在硬盘810中、或者存储在EPROM或者其它非易失性存储器中的计算机可读指令控制。软件也可从网络(图中未示出)下载。或者存储在硬盘810中,或者从网络下载的软件可被加载到RAM 802中,并由CPU 801执行,以便完成由软件确定的功能。尽管图8中描述的计算机系统能够支持根据本发明提供的技术方案,但是该计算机系统只是计算机系统的一个例子。本领域的熟练技术人员可以理解,许多其它计算机系统设计也能实现本发明的实施例。虽然这里参照附图描述了本发明的示例性实施例,但是应该理解本发明不限于这些精确的实施例,并且在不背离本发明的范围和宗旨的情况下,本领域普通技术人员能对实施例进行各种变化的修改。所有这些变化和修改意欲包含在所附权利要求中限定的本发明的范围中。应当理解,本发明的至少某些方面可以可替代地以程序产品实现。定义有关本发明的功能的程序可以通过各种信号承载介质被传送到数据存储系统或计算机系统,所述信号承载介质包括但不限于,不可写存储介质(例如,CD-ROM)、可写存储介质(例如,软盘、硬盘驱动器、读/写CD ROM、光介质)以及诸如包括以太网的计算机和电话网络之类的通信介质。因此应当理解,在此类信号承载介质中,当携带或编码有管理本发明中的方法功能的计算机可读指令时,代表本发明的可替代实施例。本发明可以硬件、软件、固件或其组合的方式实现。本发明可以集中的方式在一个计算机系统中实现,或以分布方式实现,在这种分布方式中,不同的部件分布在若干互连的计算机系统中。适于执行本文中描述的方法的任何计算机系统或其它装置都是合适的。优选地,本发明以计算机软件和通用计算机硬件的组合的方式实现,在这种实现方式中,当该计算机程序被加载和执行时,控制该计算机系统而使其执行本发明的方法,或构成本发明的系统。 上面出于举例说明的目的,给出了本发明的优选实施例的说明。优选实施例的上述说明不是穷尽的,也不打算把本发明局限于公开的明确形式,显然鉴于上述教导,许多修改和变化是可能的。对本领域的技术人员来说显而易见的这种修改和变化包括在由附加的权利要求限定的本发明的范围内。
权利要求
1.一种Java资源访问的同步方法,该方法包括: 为资源集合的第一访问接口配置第一监控器和为第二访问接口配置第二监控器; 为第一监控器配置第一等待队列和为第二监控器配置第二等待队列; 响应于第一访问接口接收到线程对资源的访问请求,第一监控器查询资源集合中是否有资源满足该访问请求; 响应于查询结果为是,该线程获得资源并通知第二监控器唤醒第二等待队列中的线程; 响应于查询结果为否,该第一监控器将该线程放入第一等待队列进行排队。
2.根据权利要求1所述的同步方法,其中所述第一访问接口是生产者类型的访问接口以及第二访问接口是消费者类型的访问接口。
3.根据权利要求2所述的同步方法,其中所述第一等待队列包括生产者线程以及第二等待队列包括消费者线程。
4.根据权利要求3所述的同步方法,其中响应于第一访问接口接收到线程对资源的访问请求第一监控器查询资源集合中是否有资源满足该访问请求包括:响应于第一访问接口接收到线程对可用空间的访问请求,第一监控器查询资源集合中是否有可用空间。
5.根据权利要求4所述的同步方法,其中该线程获得资源并通知第二监控器唤醒第二等待队列中的线程包括: 该线程获得资源集合中的 可用空间并向获得的可用空间增加数据; 由该线程通知第二监控器唤醒第二等待队列中的线程来获取资源集合中增加的数据。
6.根据权利要求1所述的同步方法,其中所述第一访问接口是消费者类型的访问接口以及第二访问接口是生产者类型的访问接口。
7.根据权利要求6所述的同步方法,其中所述第一等待队列包括消费者线程以及第二等待队列包括生产者线程。
8.根据权利要求7所述的同步方法,其中响应于第一访问接口接收到线程对资源的访问请求第一监控器查询资源集合中是否有资源满足该访问请求包括:响应于第一访问接口接收到线程对数据的访问请求,第一监控器查询资源集合中是否有数据。
9.根据权利要求8所述的同步方法,其中该线程获得资源并通知第二监控器唤醒第二等待队列中的线程包括: 该线程获得资源集合中的数据; 资源集合释放出可用空间; 由该线程通知第二监控器唤醒第二等待队列中的线程来获取资源集合中释放的可用空间。
10.一种Java资源访问的同步装置,该装置包括: 监控器配置模块,被配置成为资源集合的第一访问接口配置第一监控器和为第二访问接口配置第二监控器; 等待队列配置模块,被配置成为第一监控器配置第一等待队列和为第二监控器配置第~■等待队列; 查询模块,被配置成响应于第一访问接口接收到线程对资源的访问请求,第一监控器查询资源集合中是否有资源满足该访问请求;同步模块,被配置成响应于查询结果为是,该线程获得资源并通知第二监控器唤醒第二等待队列中的线程; 排队模块,被配置成响应于查询结果为否,该第一监控器将该线程放入第一等待队列进行排队。
11.根据权利要求9所述的同步装置,其中所述第一访问接口是生产者类型的访问接口以及第二访问接口是消费者类型的访问接口。
12.根据权利要求10所述的同步装置,其中所述第一等待队列包括生产者线程以及第二等待队列包括消费者线程。
13.根据权利要求11所述的同步装置,其中查询模块进一步被配置为:响应于第一访问接口接收到线程对可用空间的访问请求,第一监控器查询资源集合中是否有可用空间。
14.根据权利要求12所述的同步装置,其中该线程获得资源并由该第一监控器通知第二监控器唤醒第二等待队列中的线程包括: 该线程获得资源集合中的可用空间并向获得的可用空间增加数据; 由该线程通知第二监控器唤醒第二等待队列中的线程来获取资源集合中增加的数据。
15.根据权利要求9所述的同步装置,其中所述第一访问接口是消费者类型的访问接口以及第二访问接口是生产者类型的访问接口。
16.根据权利要求14所述的同步装置,其中所述第一等待队列包括消费者线程以及第二等待队列包括生产者线程。
17.根据权利要求16所述的同步装置,其中查询模块被进一步配置为:响应于第一访问接口接收到线程对数据的访问请求,第一监控器查询资源集合中是否有数据。
18.根据权利要求17所述的同步装置,其中同步模块被进一步配置为: 响应于查询结果为是,该线程获得资源集合中的数据; 资源集合释放出可用空间; 由该线程通知第二监控器唤醒第二等待队列中的线程来获取资源集合中释放的可用空间。
全文摘要
本发明公开一种Java资源访问的同步方法和装置,该方法包括为资源集合的第一访问接口配置第一监控器和为第二访问接口配置第二监控器;为第一监控器配置第一等待队列和为第二监控器配置第二等待队列;响应于第一访问接口接收到线程对资源的访问请求,第一监控器查询资源集合中是否有资源满足该访问请求;响应于查询结果为是,该线程获得资源并通知第二监控器唤醒第二等待队列中的线程;响应于查询结果为否,该第一监控器将该线程放入第一等待队列进行排队。
文档编号G06F9/52GK103092703SQ20111034700
公开日2013年5月8日 申请日期2011年10月31日 优先权日2011年10月31日
发明者滕启明, 王海川, 钟虓, 彼得·斯文尼 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1