Java资源访问的同步方法和装置制造方法及图纸

技术编号:8682583 阅读:157 留言:0更新日期:2013-05-09 02:38
本发明专利技术公开一种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,响应于第一访问接口接收到线程对资源集合的访问请求,第一监控器查询资源集合中是否有请求本文档来自技高网
...

【技术保护点】
一种Java资源访问的同步方法,该方法包括:为资源集合的第一访问接口配置第一监控器和为第二访问接口配置第二监控器;为第一监控器配置第一等待队列和为第二监控器配置第二等待队列;响应于第一访问接口接收到线程对资源的访问请求,第一监控器查询资源集合中是否有资源满足该访问请求;响应于查询结果为是,该线程获得资源并通知第二监控器唤醒第二等待队列中的线程;响应于查询结果为否,该第一监控器将该线程放入第一等待队列进行排队。

【技术特征摘要】

【专利技术属性】
技术研发人员:滕启明王海川钟虓彼得·斯文尼
申请(专利权)人:国际商业机器公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1