專利名稱:Java資源訪問的同步方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及Java資源訪問,特別涉及Java資源訪問的同步方法和裝置。
背景技術(shù):
目前,多核和多線程服務(wù)器的應(yīng)用成為主流。Java作為服務(wù)器應(yīng)用的主要開發(fā)語言之一,能夠?qū)崿F(xiàn)和管理多線程應(yīng)用程序,Java利用監(jiān)控器(Monitor)機制實現(xiàn)了線程同步。圖1示出現(xiàn)有技術(shù)Java資源訪問的監(jiān)控器模型,用于數(shù)據(jù)保護的監(jiān)控器包括了三個部分,入口區(qū)、擁有區(qū)和等待區(qū),入口區(qū)和等待區(qū)內(nèi)可能有多個線程,但是任何時刻最多只有一個線程擁有該監(jiān)控器。線程對監(jiān)控器的操作原語如下:-“進入”監(jiān)控器指線程進入入口區(qū),準備獲取監(jiān)控器,此時如果沒有別的線程擁有該監(jiān)控器,則這個線程擁有此監(jiān)控器,否則它要在入口區(qū)等待;
-“獲取”監(jiān)控器指在入口區(qū)和等待區(qū)的線程按照某種策略機制被選擇可擁有該監(jiān)控器時的操作;-“擁有”監(jiān)控器的線程在它擁有該監(jiān)控器的時候排他地占有它,從而阻止其它線程的進入;-“釋放”監(jiān)控器擁有鎖監(jiān)控器的線程執(zhí)行完監(jiān)控器范圍內(nèi)的代碼或異常退出之后,要釋放掉它所擁有的此監(jiān)控器。監(jiān)控器對線程的調(diào)度原則是:一次至多一個線程能夠在臨界區(qū)內(nèi);不能讓一個線程無限地留在臨界區(qū);不能強迫一個線程無限地等待進入臨界區(qū);不能因所選的調(diào)度策略而造成線程的饑餓(Starving),甚至死鎖(Dead Lock),對于生產(chǎn)者線程和消費者線程的模型,同一時間內(nèi)只能有一個生產(chǎn)者線程生產(chǎn),同一時間內(nèi)只能有一個消費者線程消費,生產(chǎn)者線程生產(chǎn)的同時消費者線程不能消費,資源集合滿時生產(chǎn)者線程不能繼續(xù)生產(chǎn),資源集合空時消費者線程不能繼續(xù)消費。然而,現(xiàn)有技術(shù)的監(jiān)控器機制實現(xiàn)的線程同步不能區(qū)分等待線程的類型,而是從等待線程中隨機選擇一個線程使其獲得監(jiān)控器,例如,對于生產(chǎn)者和消費者的模型,在資源集合中存在可用資源但不存在可用空間時,如果隨機選擇的是生產(chǎn)者線程,此時需要向資源集合中增加資源的生產(chǎn)者線程就無法獲得監(jiān)控器。而在資源集合中存在可用空間但不存在可用資源時,如果隨機選擇的是消費者線程,此時需要從資源集合中獲得資源的消費者線程就無法獲得監(jiān)控器,從而使資源集合的訪問性能降低,且無法擴展到較大規(guī)模的系統(tǒng)。在多階段Java服務(wù)應(yīng)用中存在很多隊列或類似隊列的資源集合,線程對資源集合訪問的效率對整個應(yīng)用的性能和可擴展能力至關(guān)重要。因此需要一種在高效的Java資源的同步訪問機制。
發(fā)明內(nèi)容
基于上述問題,本發(fā)明提供一種在Java多線程環(huán)境下的資源訪問的同步方法和
裝直。
根據(jù)本發(fā)明的第一方面,提供一種Java資源訪問的同步方法的方法,該方法包括:為資源集合的第一訪問接口配置第一監(jiān)控器和為第二訪問接口配置第二監(jiān)控器;為第一監(jiān)控器配置第一等待隊列和為第二監(jiān)控器配置第二等待隊列;響應(yīng)于第一訪問接口接收到線程對資源的訪問請求,第一監(jiān)控器查詢資源集合中是否有資源滿足該訪問請求;響應(yīng)于查詢結(jié)果為是,該線程獲得資源并通知第二監(jiān)控器喚醒第二等待隊列中的線程;響應(yīng)于查詢結(jié)果為否,該第一監(jiān)控器將該線程放入第一等待隊列進行排隊。根據(jù)本發(fā)明的第二方面,提供一種Java資源訪問的同步裝置,該裝置包括:監(jiān)控器配置模塊,被配置成為資源集合的第一訪問接口配置第一監(jiān)控器和為第二訪問接口配置第二監(jiān)控器;等待隊列配置模塊,被配置成為第一監(jiān)控器配置第一等待隊列和為第二監(jiān)控器配置第二等待隊列;查詢模塊,被配置成響應(yīng)于第一訪問接口接收到線程對資源的訪問請求,第一監(jiān)控器查詢資源集合中是否有資源滿足該訪問請求;同步模塊,被配置成響應(yīng)于查詢結(jié)果為是,該線程獲得資源并通知第二監(jiān)控器喚醒第二等待隊列中的線程;排隊模塊,被配置成響應(yīng)于查詢結(jié)果為否,該第一監(jiān)控器將該線程放入第一等待隊列進行排隊。根據(jù)本發(fā)明的實施例的的Java資源訪問的同步方法和裝置,能夠高效、準確阻塞和喚醒資源請求線程的Java資源的同步訪問機制,對提升整個應(yīng)用的性能和可擴展能力至關(guān)重要。
結(jié)合附圖,通過參考下列的實施例詳細描述在Java多線程環(huán)境下的資源訪問的同步方法和裝置,將會更好地理解本發(fā)明本身、優(yōu)選的實施方式以及本發(fā)明的目的和優(yōu)點,其中:圖1示出現(xiàn)有技術(shù)Java資源訪問的監(jiān)控器模型;圖2示出根據(jù)本發(fā)明實施例的Java資源訪問的同步方法;圖3示出根據(jù)本發(fā)明的一個實施例的Java資源訪問的同步方法;圖4示出根據(jù)本發(fā)明的另一個實施例的Java資源訪問的同步方法;圖5示出根據(jù)本發(fā)明實施例的Java資源訪問的同步機制示意圖;圖6示出根據(jù)本發(fā)明實施例的Java資源訪問的同步機制流程圖;圖7示出根據(jù)本發(fā)明的實施例的Java資源訪問的同步裝置框圖;以及圖8示出了可以實現(xiàn)根據(jù)本發(fā)明的實施例的計算設(shè)備的結(jié)構(gòu)方框圖。
具體實施例方式以下結(jié)合附圖描述根據(jù)本發(fā)明實施例的一種Java資源訪問的同步方法和裝置,將會更好地理解本發(fā)明的目的和優(yōu)點。圖2示出根據(jù)本發(fā)明實施例的Java資源訪問的同步方法,在步驟S201,為資源集合的第一訪問接口配置第一監(jiān)控器和為第二訪問接口配置第二監(jiān)控器;在步驟S202,為第一監(jiān)控器配置第一等待隊列和為第二監(jiān)控器配置第二等待隊列;在步驟S203,響應(yīng)于第一訪問接口接收到線程對資源的訪問請求,第一監(jiān)控器查詢資源集合中是否有資源滿足該訪問請求;在步驟S204,響應(yīng)于查詢結(jié)果為是,該線程獲得資源并通知第二監(jiān)控器喚醒第二等待隊列中的線程;在步驟S205,響應(yīng)于查詢結(jié)果為否,該第一監(jiān)控器將該線程放入第一等待隊列進行排隊。在步驟S201,為資源集合的第一訪問接口配置第一監(jiān)控器和為第二訪問接口配置第二監(jiān)控器,有多個訪問接口訪問Java資源集合,根據(jù)本發(fā)明的實施例,將Java資源集合的多個訪問接口進行分類,例如分為生產(chǎn)者類型的訪問接口和消費者類型的訪問接口,根據(jù)線程的方法調(diào)用將線程分為生產(chǎn)者線程和消費者線程,生產(chǎn)者線程通過生產(chǎn)者類型的訪問接口向資源集合中增加資源,消費者線程通過消費者類型的訪問接口從資源集合獲取資源。在步驟S202,為第一監(jiān)控器配置第一等待隊列和為第二監(jiān)控器配置第二等待隊列,等待隊列由監(jiān)控器進行管理,在線程無法獲得請求的資源時,根據(jù)線程的類型由各自的監(jiān)控器放置在不同的等待隊列中,例如,將生產(chǎn)者線程放置在一個等待隊列中,將消費者線程放置在另一個等待隊列中,等待監(jiān)控器喚醒,防止生產(chǎn)者線程和消費者線程沉睡。在步驟S203,響應(yīng)于第一訪問接口接收到線程對資源的訪問請求,第一監(jiān)控器查詢資源集合中是否有資源滿足該訪問請求,根據(jù)本發(fā)明的實施例,對于生產(chǎn)者線程而言,請求的是資源集合的可用空間,對于消費者線程而言,請求的是資源集合中的數(shù)據(jù);在步驟S204,響應(yīng)于查詢結(jié)果為是,該線程獲得資源并通知第二監(jiān)控器喚醒第二等待隊列中的線程;在步驟S205,響應(yīng)于查詢結(jié)果為否,該第一監(jiān)控器將該線程放入第一等待隊列進行排隊。圖3示出根據(jù)本發(fā)明的一個實施例的Java資源訪問的同步方法,其中所述第一訪問接口是生產(chǎn)者類型的訪問接口以及第二訪問接口是消費者類型的訪問接口,并且所述第一等待隊列包括生產(chǎn)者線程以及第二等待隊列包括消費者線程。在步驟S301,為資源集合的第一訪問接口配置第一監(jiān)控器和為第二訪問接口配置第二監(jiān)控器。在步驟S302,為第一監(jiān)控器配置第一等待隊列和為第二監(jiān)控器配置第二等待隊列。在步驟S303,響應(yīng)于第一訪問接口接收到線程對資源集合的訪問請求,第一監(jiān)控器查詢資源集合中是否有請求資源進一步包括響應(yīng)于第一訪問接口接收到線程對可用空間的訪問請求,第一監(jiān)控器查詢資源集合中是否有可用空間,由線程調(diào)用第一監(jiān)控器來查詢資源集合中是否有可用空間。在步驟S304,響應(yīng)于查詢結(jié)果為是,該線程獲得資源并由該線程通知第二監(jiān)控器喚醒第二等待隊列中的線程進一步包括該線程獲得資源集合中的可用空間并向獲得的可用空間增加數(shù)據(jù);以及由該線程喚醒第二等待隊列中的線程來獲取資源集合中增加的數(shù)據(jù)。在步驟S305,響應(yīng)于查詢結(jié)果為否,該第一監(jiān)控器將該線程放入第一等待隊列進行排隊,等待資源集合釋放出可用空間。圖4示出根據(jù)本發(fā)明的另一個實施例的Java資源訪問的同步方法,其中所述第一訪問接口是消費者類型的訪問接口以及第二訪問接口是生產(chǎn)者類型的訪問接口,其中所述第一等待隊列包括消費者線程以及第二等待隊列包括生產(chǎn)者線程。在步驟S401,為資源集合的第一訪問接口配置第一監(jiān)控器和為第二訪問接口配置第二監(jiān)控器。在步驟S402,為第一監(jiān)控器配置第一等待隊列和為第二監(jiān)控器配置第二等待隊列。在步驟S403,響應(yīng)于第一訪問接口接收到線程對資源集合的訪問請求,第一監(jiān)控器查詢資源集合中是否有請求資源進一步包括:響應(yīng)于第一訪問接口接收到線程對數(shù)據(jù)的訪問請求,第一監(jiān)控器查詢資源集合中是否有數(shù)據(jù)。在步驟S404,響應(yīng)于查詢結(jié)果為是,該線程獲得資源集合中的數(shù)據(jù),由該線程通知第二監(jiān)控器喚醒第二等待隊列中的線程來獲取資源集合中釋放的可用空間,具體地,如果第一監(jiān)控器查詢到資源集合有數(shù)據(jù),該線程獲得資源集合中的數(shù)據(jù),資源集合釋放出可用空間,與此同時,該線程通知第二監(jiān)控器喚醒第二等待隊列中的線程來獲取資源集合中釋放的可用空間。在步驟S405,響應(yīng)于查詢結(jié)果為否,該第一監(jiān)控器將該線程放入第一等待隊列進行排隊。圖5示出根據(jù)本發(fā)明實施例的Java資源訪問的同步機制示意圖,如圖所示,所述同步機制針對不同的訪問接口配置了多個監(jiān)控器,根據(jù)線程方法調(diào)用的類型對線程進行分類,根據(jù)本發(fā)明的實施例,將線程分為生產(chǎn)者線程和消費者線程,生產(chǎn)者線程P1、P2和?3通過第一訪問接口向資源集合中增加資源,即增加數(shù)據(jù),消費者線程Cl、C2和C3通過第二訪問接口從資源集合中獲得資源,即獲得數(shù)據(jù),按照線程的類型劃分為不同的等待隊列,例如第一等待隊列包括生產(chǎn)者線程以及第二等待隊列包括消費者線程。圖6示出根據(jù)本發(fā)明實施例的Java資源訪問的同步機制流程圖。首先在步驟S601,將訪問接口分為生產(chǎn)者類型的訪問接口和消費者類型的訪問接口;在步驟S602,為生產(chǎn)者類型的訪問接口配置第一監(jiān)控器和為消費者類型的訪問接口配置第二監(jiān)控器;在步驟S603,為第一監(jiān)控器配置第一等待隊列和為第二監(jiān)控器配置第二等待隊列。在步驟S604,判斷接收到的資源訪問請求來自生產(chǎn)者線程還是消費者線程?如果是生產(chǎn)者線程,則前進至步驟S605,生產(chǎn)者線程在第一監(jiān)控器上注冊;在步驟S606,第一監(jiān)控器查詢資源集合是否有可用空間;如果查詢結(jié)果為是,則前進至步驟S607,該線程獲得資源集合中的可用空間并向獲得的可用空間增加數(shù)據(jù),以及該線程通知第二監(jiān)控器喚醒第二等待隊列中的線程來獲得數(shù)據(jù),過程結(jié)束。如果查詢結(jié)果為否,則在步驟S608,該第一監(jiān)控器將該線程放入第一等待隊列進行排隊,過程結(jié)束。如果是消費者線程,則前進至步驟S609,該消費者線程在第二監(jiān)控器上注冊;在步驟S610,第二監(jiān)控器查詢資源集合是否有數(shù)據(jù);如果查詢結(jié)果為是,則前進至步驟S611,該線程獲得資源集合中的數(shù)據(jù),資源集合釋放掉可用空間,以及該線程通知第一監(jiān)控器喚醒第一等待隊列中的線程來獲得可用空間,過程結(jié)束。如果查詢結(jié)果為否,則在步驟S612,該第二監(jiān)控器將該線程放入第二等待隊列進行排隊,過程結(jié)束。本發(fā)明為不同類型的訪問接口分別配置了監(jiān)控器,利用監(jiān)控器分別喚醒不同等待隊列中的生產(chǎn)者線程和消費者線程,防止生產(chǎn)者線程和消費者線程沉睡,降低系統(tǒng)響應(yīng)時間,提聞資源訪問效率?;谕话l(fā)明構(gòu)思,本發(fā)明提出一種Java資源訪問的同步裝置,圖7示出根據(jù)本發(fā)明的實施例的Java資源訪問的同步裝置,該裝置包括:一種Java資源訪問的同步裝置,包括:監(jiān)控器配置模塊701,被配置成為資源集合的第一訪問接口配置第一監(jiān)控器和為第二訪問接口配置第二監(jiān)控器;等待隊列配置模塊702,被配置成為第一監(jiān)控器配置第一等待隊列和為第二監(jiān)控器配置第二等待隊列;查詢模塊703,被配置為響應(yīng)于第一訪問接口接收到線程對資源的訪問請求,第一監(jiān)控器查詢資源集合中是否有資源滿足該訪問請求;同步模塊704,被配置成響應(yīng)于查詢結(jié)果為是,該線程獲得資源并通知第二監(jiān)控器喚醒第二等待隊列中的線程;排隊模塊705,被配置成響應(yīng)于查詢結(jié)果為否,該第一監(jiān)控器將該線程放入第一等待隊列進行排隊。根據(jù)本發(fā)明的一個實施例,其中所述第一訪問接口是生產(chǎn)者類型的訪問接口以及第二訪問接口是消費者類型的訪問接口,其中所述第一等待隊列包括生產(chǎn)者線程以及第二等待隊列包括消費者線程。根據(jù)本發(fā)明的實施例,其中查詢模塊進一步被配置為:響應(yīng)于第一訪問接口接收到線程對可用空間的訪問請求,第一監(jiān)控器查詢資源集合中是否有可用空間。同步模塊被進一步配置為:線程獲得資源集合中的可用空間并向獲得的可用空間增加數(shù)據(jù);由該線程喚醒第二等待隊列中的線程來獲取資源集合中增加的數(shù)據(jù)。根據(jù)本發(fā)明的另一個實施例,其中所述第一訪問接口是消費者類型的訪問接口以及第二訪問接口是生產(chǎn)者類型的訪問接口,其中所述第一等待隊列包括消費者線程以及第二等待隊列包括生產(chǎn)者線程。其中查詢模塊被進一步配置為:響應(yīng)于第一訪問接口接收到線程對數(shù)據(jù)的訪問請求,第一監(jiān)控器查詢資源集合中是否有數(shù)據(jù)。同步模塊被進一步配置為:響應(yīng)于查詢結(jié)果為是,該線程獲得資源集合中的數(shù)據(jù);資源集合釋放出可用空間;由該線程通知第二監(jiān)控器喚醒第二等待隊列中的線程來獲取資源集合中釋放的可用空間。圖8則示意性示出了可以實現(xiàn)根據(jù)本發(fā)明的實施例的計算設(shè)備的結(jié)構(gòu)方框圖。圖8中所示的計算機系統(tǒng)包括CPU (中央處理單元)801、RAM (隨機存取存儲器)802、ROM (只讀存儲器)803、系統(tǒng)總線804,硬盤監(jiān)控器805、鍵盤監(jiān)控器806、串行接口監(jiān)控器807、并行接口監(jiān)控器808、顯示器監(jiān)控器809、硬盤810、鍵盤811、串行外部設(shè)備812、并行外部設(shè)備813和顯示器814。在這些部件中,與系統(tǒng)總線804相連的有CPU 801、RAM802、R0M803、硬盤監(jiān)控器805、鍵盤監(jiān)控器806,串行接口監(jiān)控器807,并行接口監(jiān)控器808和顯示器監(jiān)控器809。硬盤810與硬盤監(jiān)控器805相連,鍵盤811與鍵盤監(jiān)控器806相連,串行外部設(shè)備812與串行接口監(jiān)控器807相連,并行外部設(shè)備813與并行接口監(jiān)控器808相連,以及顯示器814與顯示器監(jiān)控器809相連。圖8中每個部件的功能在本技術(shù)領(lǐng)域內(nèi)都是眾所周知的,并且圖8所示的結(jié)構(gòu)也是常規(guī)的。這種結(jié)構(gòu)不僅用于個人計算機,而且用于手持設(shè)備,如Palm PC、PDA(個人數(shù)據(jù)助理)、移動電話等等。在不同的應(yīng)用中,例如用于實現(xiàn)包含有根據(jù)本發(fā)明的客戶端模塊的用戶終端或者包含有根據(jù)本發(fā)明的網(wǎng)絡(luò)應(yīng)用服務(wù)器的服務(wù)器主機時,可以向圖8中所示的結(jié)構(gòu)添加某些部件,或者圖8中的某些部件可以被省略。圖8中所示的整個系統(tǒng)由通常作為軟件存儲在硬盤810中、或者存儲在EPROM或者其它非易失性存儲器中的計算機可讀指令控制。軟件也可從網(wǎng)絡(luò)(圖中未示出)下載?;蛘叽鎯υ谟脖P810中,或者從網(wǎng)絡(luò)下載的軟件可被加載到RAM 802中,并由CPU 801執(zhí)行,以便完成由軟件確定的功能。盡管圖8中描述的計算機系統(tǒng)能夠支持根據(jù)本發(fā)明提供的技術(shù)方案,但是該計算機系統(tǒng)只是計算機系統(tǒng)的一個例子。本領(lǐng)域的熟練技術(shù)人員可以理解,許多其它計算機系統(tǒng)設(shè)計也能實現(xiàn)本發(fā)明的實施例。雖然這里參照附圖描述了本發(fā)明的示例性實施例,但是應(yīng)該理解本發(fā)明不限于這些精確的實施例,并且在不背離本發(fā)明的范圍和宗旨的情況下,本領(lǐng)域普通技術(shù)人員能對實施例進行各種變化的修改。所有這些變化和修改意欲包含在所附權(quán)利要求中限定的本發(fā)明的范圍中。應(yīng)當理解,本發(fā)明的至少某些方面可以可替代地以程序產(chǎn)品實現(xiàn)。定義有關(guān)本發(fā)明的功能的程序可以通過各種信號承載介質(zhì)被傳送到數(shù)據(jù)存儲系統(tǒng)或計算機系統(tǒng),所述信號承載介質(zhì)包括但不限于,不可寫存儲介質(zhì)(例如,CD-ROM)、可寫存儲介質(zhì)(例如,軟盤、硬盤驅(qū)動器、讀/寫CD ROM、光介質(zhì))以及諸如包括以太網(wǎng)的計算機和電話網(wǎng)絡(luò)之類的通信介質(zhì)。因此應(yīng)當理解,在此類信號承載介質(zhì)中,當攜帶或編碼有管理本發(fā)明中的方法功能的計算機可讀指令時,代表本發(fā)明的可替代實施例。本發(fā)明可以硬件、軟件、固件或其組合的方式實現(xiàn)。本發(fā)明可以集中的方式在一個計算機系統(tǒng)中實現(xiàn),或以分布方式實現(xiàn),在這種分布方式中,不同的部件分布在若干互連的計算機系統(tǒng)中。適于執(zhí)行本文中描述的方法的任何計算機系統(tǒng)或其它裝置都是合適的。優(yōu)選地,本發(fā)明以計算機軟件和通用計算機硬件的組合的方式實現(xiàn),在這種實現(xiàn)方式中,當該計算機程序被加載和執(zhí)行時,控制該計算機系統(tǒng)而使其執(zhí)行本發(fā)明的方法,或構(gòu)成本發(fā)明的系統(tǒng)。 上面出于舉例說明的目的,給出了本發(fā)明的優(yōu)選實施例的說明。優(yōu)選實施例的上述說明不是窮盡的,也不打算把本發(fā)明局限于公開的明確形式,顯然鑒于上述教導,許多修改和變化是可能的。對本領(lǐng)域的技術(shù)人員來說顯而易見的這種修改和變化包括在由附加的權(quán)利要求限定的本發(fā)明的范圍內(nèi)。
權(quán)利要求
1.一種Java資源訪問的同步方法,該方法包括: 為資源集合的第一訪問接口配置第一監(jiān)控器和為第二訪問接口配置第二監(jiān)控器; 為第一監(jiān)控器配置第一等待隊列和為第二監(jiān)控器配置第二等待隊列; 響應(yīng)于第一訪問接口接收到線程對資源的訪問請求,第一監(jiān)控器查詢資源集合中是否有資源滿足該訪問請求; 響應(yīng)于查詢結(jié)果為是,該線程獲得資源并通知第二監(jiān)控器喚醒第二等待隊列中的線程; 響應(yīng)于查詢結(jié)果為否,該第一監(jiān)控器將該線程放入第一等待隊列進行排隊。
2.根據(jù)權(quán)利要求1所述的同步方法,其中所述第一訪問接口是生產(chǎn)者類型的訪問接口以及第二訪問接口是消費者類型的訪問接口。
3.根據(jù)權(quán)利要求2所述的同步方法,其中所述第一等待隊列包括生產(chǎn)者線程以及第二等待隊列包括消費者線程。
4.根據(jù)權(quán)利要求3所述的同步方法,其中響應(yīng)于第一訪問接口接收到線程對資源的訪問請求第一監(jiān)控器查詢資源集合中是否有資源滿足該訪問請求包括:響應(yīng)于第一訪問接口接收到線程對可用空間的訪問請求,第一監(jiān)控器查詢資源集合中是否有可用空間。
5.根據(jù)權(quán)利要求4所述的同步方法,其中該線程獲得資源并通知第二監(jiān)控器喚醒第二等待隊列中的線程包括: 該線程獲得資源集合中的 可用空間并向獲得的可用空間增加數(shù)據(jù); 由該線程通知第二監(jiān)控器喚醒第二等待隊列中的線程來獲取資源集合中增加的數(shù)據(jù)。
6.根據(jù)權(quán)利要求1所述的同步方法,其中所述第一訪問接口是消費者類型的訪問接口以及第二訪問接口是生產(chǎn)者類型的訪問接口。
7.根據(jù)權(quán)利要求6所述的同步方法,其中所述第一等待隊列包括消費者線程以及第二等待隊列包括生產(chǎn)者線程。
8.根據(jù)權(quán)利要求7所述的同步方法,其中響應(yīng)于第一訪問接口接收到線程對資源的訪問請求第一監(jiān)控器查詢資源集合中是否有資源滿足該訪問請求包括:響應(yīng)于第一訪問接口接收到線程對數(shù)據(jù)的訪問請求,第一監(jiān)控器查詢資源集合中是否有數(shù)據(jù)。
9.根據(jù)權(quán)利要求8所述的同步方法,其中該線程獲得資源并通知第二監(jiān)控器喚醒第二等待隊列中的線程包括: 該線程獲得資源集合中的數(shù)據(jù); 資源集合釋放出可用空間; 由該線程通知第二監(jiān)控器喚醒第二等待隊列中的線程來獲取資源集合中釋放的可用空間。
10.一種Java資源訪問的同步裝置,該裝置包括: 監(jiān)控器配置模塊,被配置成為資源集合的第一訪問接口配置第一監(jiān)控器和為第二訪問接口配置第二監(jiān)控器; 等待隊列配置模塊,被配置成為第一監(jiān)控器配置第一等待隊列和為第二監(jiān)控器配置第~■等待隊列; 查詢模塊,被配置成響應(yīng)于第一訪問接口接收到線程對資源的訪問請求,第一監(jiān)控器查詢資源集合中是否有資源滿足該訪問請求;同步模塊,被配置成響應(yīng)于查詢結(jié)果為是,該線程獲得資源并通知第二監(jiān)控器喚醒第二等待隊列中的線程; 排隊模塊,被配置成響應(yīng)于查詢結(jié)果為否,該第一監(jiān)控器將該線程放入第一等待隊列進行排隊。
11.根據(jù)權(quán)利要求9所述的同步裝置,其中所述第一訪問接口是生產(chǎn)者類型的訪問接口以及第二訪問接口是消費者類型的訪問接口。
12.根據(jù)權(quán)利要求10所述的同步裝置,其中所述第一等待隊列包括生產(chǎn)者線程以及第二等待隊列包括消費者線程。
13.根據(jù)權(quán)利要求11所述的同步裝置,其中查詢模塊進一步被配置為:響應(yīng)于第一訪問接口接收到線程對可用空間的訪問請求,第一監(jiān)控器查詢資源集合中是否有可用空間。
14.根據(jù)權(quán)利要求12所述的同步裝置,其中該線程獲得資源并由該第一監(jiān)控器通知第二監(jiān)控器喚醒第二等待隊列中的線程包括: 該線程獲得資源集合中的可用空間并向獲得的可用空間增加數(shù)據(jù); 由該線程通知第二監(jiān)控器喚醒第二等待隊列中的線程來獲取資源集合中增加的數(shù)據(jù)。
15.根據(jù)權(quán)利要求9所述的同步裝置,其中所述第一訪問接口是消費者類型的訪問接口以及第二訪問接口是生產(chǎn)者類型的訪問接口。
16.根據(jù)權(quán)利要求14所述的同步裝置,其中所述第一等待隊列包括消費者線程以及第二等待隊列包括生產(chǎn)者線程。
17.根據(jù)權(quán)利要求16所述的同步裝置,其中查詢模塊被進一步配置為:響應(yīng)于第一訪問接口接收到線程對數(shù)據(jù)的訪問請求,第一監(jiān)控器查詢資源集合中是否有數(shù)據(jù)。
18.根據(jù)權(quán)利要求17所述的同步裝置,其中同步模塊被進一步配置為: 響應(yīng)于查詢結(jié)果為是,該線程獲得資源集合中的數(shù)據(jù); 資源集合釋放出可用空間; 由該線程通知第二監(jiān)控器喚醒第二等待隊列中的線程來獲取資源集合中釋放的可用空間。
全文摘要
本發(fā)明公開一種Java資源訪問的同步方法和裝置,該方法包括為資源集合的第一訪問接口配置第一監(jiān)控器和為第二訪問接口配置第二監(jiān)控器;為第一監(jiān)控器配置第一等待隊列和為第二監(jiān)控器配置第二等待隊列;響應(yīng)于第一訪問接口接收到線程對資源的訪問請求,第一監(jiān)控器查詢資源集合中是否有資源滿足該訪問請求;響應(yīng)于查詢結(jié)果為是,該線程獲得資源并通知第二監(jiān)控器喚醒第二等待隊列中的線程;響應(yīng)于查詢結(jié)果為否,該第一監(jiān)控器將該線程放入第一等待隊列進行排隊。
文檔編號G06F9/52GK103092703SQ20111034700
公開日2013年5月8日 申請日期2011年10月31日 優(yōu)先權(quán)日2011年10月31日
發(fā)明者滕啟明, 王海川, 鐘虓, 彼得·斯文尼 申請人:國際商業(yè)機器公司