两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

一種線程獲取方法及設(shè)備與流程

文檔序號:12119460閱讀:248來源:國知局
一種線程獲取方法及設(shè)備與流程

本申請涉及通信技術(shù)領(lǐng)域,特別涉及一種線程獲取方法,以及一種線程獲取設(shè)備。



背景技術(shù):

在基于面向?qū)ο缶幊痰膽?yīng)用中,創(chuàng)建和銷毀對象是很費(fèi)時間的,因為創(chuàng)建一個對象要獲取內(nèi)存資源或者其它更多資源。

例如,在基于Java編程技術(shù)的應(yīng)用中,JVM(JAVA Virtual Machine,JAVA虛擬機(jī))將試圖跟蹤每一個對象,以便能夠在對象銷毀后進(jìn)行垃圾回收。所以提高服務(wù)程序效率的一個手段就是盡可能減少創(chuàng)建和銷毀對象的次數(shù),特別是一些很耗資源的對象創(chuàng)建和銷毀。如何利用已有對象來服務(wù)就是一個需要解決的關(guān)鍵問題,于是產(chǎn)生了線程池技術(shù)。

線程池技術(shù)能有效減少多線程環(huán)境中資源的消耗,可以提高系統(tǒng)的處理能力。但是其缺陷是當(dāng)通過線程池并發(fā)獲得線程的時候,為保證同一個線程不會被兩個待執(zhí)行工作任務(wù)所同時獲取,需要進(jìn)行加鎖,排隊獲取線程,由此會造成獲取線程效率降低。



技術(shù)實現(xiàn)要素:

本申請?zhí)峁┮环N線程獲取方法及設(shè)備,在應(yīng)用程序獲取線程池中的線程執(zhí)行操作時,盡量減少了任務(wù)與任務(wù)之間的資源爭用,提高了獲取執(zhí)行任務(wù)的線程的效率,進(jìn)而增強(qiáng)應(yīng)用程序的伸縮性和健壯性。

本申請實施例提供一種線程獲取方法,所述方法包括以下步驟:

在應(yīng)用服務(wù)器啟動時,將線程池劃分為多個線程集合;

當(dāng)確認(rèn)一個或多個待執(zhí)行用戶任務(wù)需要從所述線程池中獲取線程進(jìn)行執(zhí)行操作時,分別確定各待執(zhí)行用戶任務(wù)所歸屬的線程集合;

分別判斷所確定的各線程集合中是否有空閑線程;

當(dāng)判斷當(dāng)前線程集合中有空閑線程時,將所述空閑線程返回給歸屬到所述當(dāng)前線程集合的待執(zhí)行用戶任務(wù)。

優(yōu)選的,所述在應(yīng)用服務(wù)器啟動時,將線程池劃分為多個線程集合之后,還包括:

為各所述線程集合設(shè)置最小線程數(shù)量和最大線程數(shù)量;

為各所述線程集合創(chuàng)建最小線程數(shù)量的線程;

初始化包含所述最小線程數(shù)量的線程的各所述線程集合。

優(yōu)選的,所述分別判斷所確定的各線程集合中是否有空閑線程之后,還包括:

當(dāng)判斷當(dāng)前線程集合中沒有空閑線程時,判斷在所述當(dāng)前線程集合中執(zhí)行操作的用戶任務(wù)數(shù)量是否大于為所述線程集合設(shè)置的最大線程數(shù)量;

如果沒有大于,則在所述當(dāng)前線程集合中創(chuàng)建一個線程,供歸屬到所述當(dāng)前線程集合的待執(zhí)行用戶任務(wù)使用;

如果大于,則根據(jù)預(yù)設(shè)的線程替換規(guī)則,判斷在所述線程池中的其他線程集合中是否可以為所述待執(zhí)行的用戶任務(wù)獲取線程,如果可以,則將獲取到的線程返回給所述待執(zhí)行用戶任務(wù),如果不可以,則返回異常提示消息。

優(yōu)選的,所述根據(jù)預(yù)設(shè)的線程替換規(guī)則,判斷在所述線程池中的其他線程集合中是否可以為所述待執(zhí)行的用戶任務(wù)獲取線程,如果可以,則將獲取到的線程返回給所述待執(zhí)行用戶任務(wù),如果不可以,則返回異常提示消息,具體為:

根據(jù)預(yù)設(shè)的順序或隨機(jī)在所述線程池中選擇一個替換線程集合;

如果所述替換線程集合中當(dāng)前包含空閑線程,則將所述空閑線程返回給所述待執(zhí)行用戶任務(wù),并記錄所述待執(zhí)行用戶任務(wù)所使用的所述空閑線程所屬的線程集合及其在所述線程池中的位置;

如果所述替換線程集合中當(dāng)前沒有包含空閑線程,則判斷所述替換線程集合是否可以創(chuàng)建新的線程,如果可以,則創(chuàng)建新的線程,并將所述新的線程返回給所述待執(zhí)行用戶任務(wù),并記錄所述待執(zhí)行用戶任務(wù)所使用的所述新的線程所屬的線程集合及其在所述線程池中的位置;

如果所述替換線程集合不能創(chuàng)建新的線程,則繼續(xù)選擇下一個替換線程集合嘗試尋找空閑線程或創(chuàng)建新的線程給所述待執(zhí)行用戶任務(wù);

當(dāng)所述線程池中的所有線程集合都無法為所述待執(zhí)行任務(wù)提供空閑線程或創(chuàng)建新的線程時,返回異常提示消息。

優(yōu)選的,所述判斷所述替換線程集合是否可以創(chuàng)建新的線程,具體為:

根據(jù)所述替換線程集合中的當(dāng)前線程數(shù)量以及為各所述線程集合設(shè)置最大線程數(shù)量,判斷所述替換線程集合是否可以創(chuàng)建新的線程

當(dāng)所述替換線程集合中的當(dāng)前線程數(shù)量小于為各所述線程集合設(shè)置最大線程數(shù)量時,則確定所述替換線程集合可以創(chuàng)建新的線程;

當(dāng)所述替換線程集合中的當(dāng)前線程數(shù)量等于或大于為各所述線程集合設(shè)置最大線程數(shù)量時,則確定所述替換線程集合不可以創(chuàng)建新的線程。

優(yōu)選的,所述分別確定各待執(zhí)行用戶任務(wù)所歸屬的線程集合,具體包括:

分別獲取當(dāng)前所接收到的各待執(zhí)行用戶任務(wù)的ID;

分別根據(jù)所述各待執(zhí)行用戶任務(wù)的ID對所述線程池中所劃分的線程集合個數(shù)進(jìn)行取模;

根據(jù)相應(yīng)的取模結(jié)果分別確定所述各待執(zhí)行用戶任務(wù)所歸屬的線程集合。

另一方面,本申請還提供了一種線程獲取設(shè)備,包括:

線程管理模塊,用于在應(yīng)用服務(wù)器啟動時,將線程池劃分為多個線程集合;

定位模塊,用于當(dāng)確認(rèn)用戶任務(wù)需要從所述線程池中獲取線程進(jìn)行執(zhí)行操作時,在所述線程管理模塊所劃分的各線程集合中,分別確定各待執(zhí)行用戶任務(wù)所歸屬的線程集合;

判斷模塊,用于分別判斷所述定位模塊所確定的各線程集合中是否有空閑線程;

處理模塊,用于當(dāng)所述判斷模塊判斷當(dāng)前線程集合中有空閑線程時,將所述空閑線程返回給歸屬到所述當(dāng)前線程集合的待執(zhí)行用戶任務(wù)。

優(yōu)選的,所述線程管理模塊,還用于:

在將所述線程池劃分為多個線程集合之后,為各所述線程集合設(shè)置最小線程數(shù)量和最大線程數(shù)量;

為各所述線程集合創(chuàng)建最小線程數(shù)量的線程;

初始化包含所述最小線程數(shù)量的線程的各所述線程集合。

優(yōu)選的,所述處理模塊,具體用于:

所述判斷模塊,還用于當(dāng)判斷所述當(dāng)前線程集合中沒有空閑線程時,判斷在所述當(dāng)前線程集合中執(zhí)行操作的用戶任務(wù)數(shù)量是否大于所述線程管理模塊為所述線程集合設(shè)置的最大線程數(shù)量;

所述處理模塊,還用于在所述判斷模塊的判斷結(jié)果為沒有大于時,在所述當(dāng)前線程集合中創(chuàng)建一個線程,供歸屬到所述當(dāng)前線程集合的待執(zhí)行用戶任務(wù)使用,或在所述判斷模塊的判斷結(jié)果為大于時,根據(jù)預(yù)設(shè)的線程替換規(guī)則,判斷在所述線程池中的其他線程集合中是否可以為所述待執(zhí)行的用戶任務(wù)獲取線程,如果可以,則將獲取到的線程返回給所述待執(zhí)行用戶任務(wù),如果不可以,則返回異常提示消息。

優(yōu)選的,所述定位模塊,具體用于:

分別獲取當(dāng)前所接收到的各待執(zhí)行用戶任務(wù)的ID;

分別根據(jù)所述各待執(zhí)行用戶任務(wù)的ID對所述線程管理模塊在所述線程池中所劃分的線程集合個數(shù)進(jìn)行取模;

根據(jù)相應(yīng)的取模結(jié)果分別確定所述各待執(zhí)行用戶任務(wù)所歸屬的線程集合。

與現(xiàn)有技術(shù)相比,本申請實施例所提出的技術(shù)方案具有以下優(yōu)點(diǎn):

通過應(yīng)用本申請實施例所提出的技術(shù)方案,解決了現(xiàn)有技術(shù)在通過線程池并發(fā)獲得線程的時候,需要進(jìn)行加鎖判斷線程是否空閑,排隊獲取線程,從而導(dǎo)致獲取線程效率低下的問題。本申請實施例所提出的技術(shù)方案在應(yīng)用程序獲取線程池中的線程執(zhí)行操作時,不需要進(jìn)行加鎖,盡量減少了任務(wù)與任務(wù)之間的資源爭用,提高了獲取執(zhí)行任務(wù)的線程的效率,進(jìn)而增強(qiáng)應(yīng)用程序的伸縮性和健壯性。

附圖說明

為了更加清楚地說明本申請實施例的技術(shù)方案,下面將對本申請實施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本申請的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)本申請實施例的這些附圖獲得其他的附圖。

圖1為本申請實施例所提出的一種線程獲取方法的流程示意圖;

圖2為本申請實施例所提出的一種具體實施例中線程獲取方法的流程示意圖;

圖3為本申請實施例所提出的一種線程獲取設(shè)備的結(jié)構(gòu)示意圖。

具體實施方式

正如本申請背景技術(shù)所陳述的,現(xiàn)有方案中,在通過線程池并發(fā)獲得線程時,需要進(jìn)行加鎖判斷線程是否空閑,排隊獲取線程,從而,導(dǎo)致獲取線程效率低下。

為克服現(xiàn)有技術(shù)中的缺陷,本申請實施例提出了一種線程獲取方法解決了現(xiàn)有技術(shù)在通過線程池并發(fā)獲得線程的時候,需要進(jìn)行加鎖判斷線程是否空閑,排隊獲取線程,從而導(dǎo)致獲取線程效率低下的問題。

實施例一

如圖1所示,為本申請實施例所提出的一種線程獲取方法的流程示意圖,該方法具體包括以下步驟:

步驟S101、在應(yīng)用服務(wù)器啟動時,將線程池劃分為多個線程集合。

在具體的應(yīng)用場景中,為了實現(xiàn)后續(xù)的線程處理,在本步驟進(jìn)行線程集合劃分之后,還包括以下處理:

首先,為所劃分的各所述線程集合設(shè)置最小線程數(shù)量和最大線程數(shù)量。

根據(jù)設(shè)置結(jié)果,為各所述線程集合創(chuàng)建最小線程數(shù)量的線程,然后,初始化包含所述最小線程數(shù)量的線程的各所述線程集合。

需要說明的是,在上述處理中,之所以在本申請實施例中只是創(chuàng)建最小線程數(shù)量的線程,原因具體如下:

首先,在線程池技術(shù)中,創(chuàng)建線程是一個很耗費(fèi)計算機(jī)資源的工作,所以,應(yīng)該盡量減少線程創(chuàng)建操作。但如果預(yù)先不進(jìn)行線程的創(chuàng)建,而是在有任務(wù)來臨的時候才進(jìn)行線程創(chuàng)建的話,則響應(yīng)時間中將會包含線程創(chuàng)建這一步所損耗的時間,從而,會使得響應(yīng)時間變慢。

基于上述考慮,本申請實施例所提出的技術(shù)方案在服務(wù)啟動時,便預(yù)先創(chuàng)建一個最小線程數(shù)量的線程,以此來滿足日常需求,從而,在一般情況下,當(dāng)接收到用戶任務(wù)時,可以直接利用已創(chuàng)建的線程,而不需要再新建線程。

另一方面,設(shè)置最大線程數(shù)量是因為:如果任務(wù)突然暴增,而此時最小線程明顯不夠使用,則服務(wù)器會新創(chuàng)建線程來實現(xiàn)更好的響應(yīng),但是,因為計算機(jī)資源也是有限的,因此,會規(guī)定一個最大線程數(shù)量,一旦超過這一數(shù)量,則不會繼續(xù)創(chuàng)建新的線程,因為再創(chuàng)建的話,會使得應(yīng)用服務(wù)器的服務(wù)能力下降。

因此,對于本申請實施例所提出的技術(shù)方案,在一般情況下,會在應(yīng)用服務(wù)器啟動時,對每個線程集合創(chuàng)建最小線程數(shù)量的線程,而如果任務(wù)數(shù)量暴增,則會在線程池中創(chuàng)建新的線程供新任務(wù)使用,但是不會創(chuàng)建超過最大線程數(shù)量的線程。

在完成本步驟的處理之后,當(dāng)確認(rèn)一個或多個待執(zhí)行用戶任務(wù)需要從所述線程池中獲取線程進(jìn)行執(zhí)行操作時,執(zhí)行步驟S102。

步驟S102、分別確定各待執(zhí)行用戶任務(wù)所歸屬的線程集合。

具體的,本步驟的處理可以為:

分別獲取當(dāng)前所接收到的各待執(zhí)行用戶任務(wù)的ID;

分別根據(jù)所述各待執(zhí)行用戶任務(wù)的ID對所述線程池中所劃分的線程集合個數(shù)進(jìn)行取模;

根據(jù)相應(yīng)的取模結(jié)果分別確定所述各待執(zhí)行用戶任務(wù)所歸屬的線程集合。

在本實施例中由于在應(yīng)用服務(wù)器啟動時,就創(chuàng)建了一個由多個所述線程集合所組成的線程池;當(dāng)確認(rèn)用戶任務(wù)需要獲取線程進(jìn)行執(zhí)行操作時,可以根據(jù)不同的用戶任務(wù)的ID定位不同的線程集合,從而使得在通過線程池并發(fā)獲得線程的時候,不需要進(jìn)行加鎖判斷線程是否空閑,為進(jìn)一步獲取線程的提高了效率。

步驟S103、分別判斷所確定的各線程集合中是否有空閑線程。

當(dāng)判斷當(dāng)前線程集合中有空閑線程時,執(zhí)行步驟S104。

步驟S104、將所述空閑線程返回給歸屬到所述當(dāng)前線程集合的待執(zhí)行用戶任務(wù)。

通過上述的處理,可以實現(xiàn)在存在空閑線程的情況下,為歸屬到每個線程集合中的待執(zhí)行用戶任務(wù)分配相應(yīng)的空閑線程的處理,從而,即使在多線程并發(fā)的情況下,也可以通過多個線程集合來實現(xiàn)各待執(zhí)行用戶任務(wù)的線程分配,從而可以解決現(xiàn)有技術(shù)在通過線程池并發(fā)獲得線程的時候,需要進(jìn)行加鎖判斷線程是否空閑,排隊獲取線程,從而導(dǎo)致獲取線程效率低下的問題。

為了更加完整的說明本申請實施例所提出的技術(shù)方案,本實施例進(jìn)一步說明在步驟S103中,當(dāng)前線程集合中沒有空閑線程時的后續(xù)處理過程,具體說明如下:

當(dāng)判斷當(dāng)前線程集合中沒有空閑線程時,判斷在所述當(dāng)前線程集合中執(zhí)行操作的用戶任務(wù)數(shù)量是否大于步驟S101中為所述線程集合設(shè)置的最大線程數(shù)量。

如果沒有大于,,說明此時的線程集合還未飽和,則在所述當(dāng)前線程集合中創(chuàng)建一個線程,供歸屬到所述當(dāng)前線程集合的待執(zhí)行用戶任務(wù)使用。

如果大于,說明此時的當(dāng)前線程集合已經(jīng)飽和,則根據(jù)預(yù)設(shè)的線程替換規(guī)則,判斷在所述線程池中的其他線程集合中是否可以為所述待執(zhí)行的用戶任務(wù)獲取線程,如果可以,則將獲取到的線程返回給所述待執(zhí)行用戶任務(wù),如果不可以,則返回異常提示消息。

為了充分利用線程池中的線程資源,在當(dāng)前線程集合沒有資源可以創(chuàng)建線程的情況下,可以調(diào)用其他線程集合中的線程資源,而為了整體資源的合理調(diào)度,本申請實施例進(jìn)一步引入了上述的線程替換規(guī)則,在具體的應(yīng)用場景中,上述的應(yīng)用線程出處理過程具體可以如下:

首先,根據(jù)預(yù)設(shè)的順序或隨機(jī)在所述線程池中選擇一個替換線程集合。

如果所述替換線程集合中當(dāng)前包含空閑線程,則將所述空閑線程返回給所述待執(zhí)行用戶任務(wù),并記錄所述待執(zhí)行用戶任務(wù)所使用的所述空閑線程所屬的線程集合及其在所述線程池中的位置。

如果所述替換線程集合中當(dāng)前沒有包含空閑線程,則判斷所述替換線程集合是否可以創(chuàng)建新的線程。

如果所述替換線程集合可以創(chuàng)建新的線程,則創(chuàng)建新的線程,并將所述新的線程返回給所述待執(zhí)行用戶任務(wù),并記錄所述待執(zhí)行用戶任務(wù)所使用的所述新的線程所屬的線程集合及其在所述線程池中的位置。

如果所述替換線程集合不能創(chuàng)建新的線程,則繼續(xù)選擇下一個替換線程集合嘗試尋找空閑線程或創(chuàng)建新的線程給所述待執(zhí)行用戶任務(wù)。

當(dāng)所述線程池中的所有線程集合都無法為所述待執(zhí)行任務(wù)提供空閑線程或創(chuàng)建新的線程時,返回異常提示消息。

在具體的應(yīng)用場景中,上述的判斷所述替換線程集合是否可以創(chuàng)建新的線程的操作,可以按照以下方式來實現(xiàn):

根據(jù)所述替換線程集合中的當(dāng)前線程數(shù)量以及為各所述線程集合設(shè)置最大線程數(shù)量,說明此時的所述替換線程集合還未飽和,則判斷所述替換線程集合是否可以創(chuàng)建新的線程。

當(dāng)所述替換線程集合中的當(dāng)前線程數(shù)量小于為各所述線程集合設(shè)置最大線程數(shù)量時,則確定所述替換線程集合可以創(chuàng)建新的線程。

當(dāng)所述替換線程集合中的當(dāng)前線程數(shù)量等于或大于為各所述線程集合設(shè)置最大線程數(shù)量時,則確定所述替換線程集合不可以創(chuàng)建新的線程。

在具體的應(yīng)用場景中,判斷線程池中的其他線程集合是否包含空閑線程,以及在沒有空閑線程的情況下是否可以創(chuàng)建新線程的操作,為充分利用線程池中的線程資源提供了一套可以實現(xiàn)分層演進(jìn)的資源替代方案,而且相應(yīng)的替換操作在一定時間區(qū)間內(nèi)會集中在一個線程集合中進(jìn)行,這不會干擾其他 線程集合的正常操作,無需像現(xiàn)有技術(shù)一樣進(jìn)行加鎖和排隊的處理,提高了并發(fā)線程的場景下,資源調(diào)度和分配的效率。

通過應(yīng)用本申請實施例所提出的技術(shù)方案,解決了現(xiàn)有技術(shù)在通過線程池并發(fā)獲得線程的時候,需要進(jìn)行加鎖判斷線程是否空閑,排隊獲取線程,從而導(dǎo)致獲取線程效率低下的問題。本申請實施例所提出的技術(shù)方案在應(yīng)用程序獲取線程池中的線程執(zhí)行操作時,不需要進(jìn)行加鎖,盡量減少了任務(wù)與任務(wù)之間的資源爭用,提高了獲取執(zhí)行任務(wù)的線程的效率,進(jìn)而增強(qiáng)應(yīng)用程序的伸縮性和健壯性。

實施例二

為了進(jìn)一步闡述本申請的技術(shù)方案,現(xiàn)結(jié)合具體的應(yīng)用場景,對本申請的技術(shù)方案進(jìn)行說明,如圖2所示,本實施例提出的一種線程獲取方法,應(yīng)用于應(yīng)用服務(wù)器中,該方法具體包括以下步驟:

步驟S201,在應(yīng)用服務(wù)器啟動時創(chuàng)建一個線程池,所述線程池由多個線程集合組成,為各所述線程集合創(chuàng)建最小線程數(shù)量的線程,然后,初始化包含所述最小線程數(shù)量的線程的各所述線程集合。

在本申請優(yōu)選地實施例中,在應(yīng)用服務(wù)啟動時,創(chuàng)建一個由多個線程集合組成的線程池相當(dāng)于將原來的一個大的線程集合,分為幾個小的線程集合,這幾個小的線程集合組成一個線程池,當(dāng)確定用戶任務(wù)需要獲取用戶任務(wù)時,可以根據(jù)不同的用戶任務(wù)ID定位到不同的線程集合中,從而使得不同的用戶任務(wù)并發(fā)獲取線程的過程中不需要進(jìn)行加鎖,提高了線程獲取的效率。

在應(yīng)用服務(wù)啟動時,之所以先為各所述線程集合創(chuàng)建最小線程數(shù)量的線程,是因為創(chuàng)建線程是一個很耗費(fèi)計算機(jī)資源的工作,當(dāng)有任務(wù)來臨,在創(chuàng)建線程,則響應(yīng)時間中包含線程創(chuàng)建這一步,會使得響應(yīng)時間變慢,因此在應(yīng)用服務(wù)啟動時,先為各所述線程集合創(chuàng)建最小線程數(shù)量的線程,此時滿足 日常需求,如果有應(yīng)用任務(wù)需要獲取線程,則可以直接利用線程,不需要再臨時新建線程。

在應(yīng)用服務(wù)啟動時,之所以設(shè)置最大線程數(shù)量,是為了使應(yīng)用服務(wù)器在現(xiàn)有的服務(wù)能力范圍內(nèi)更好的工作。例如,如果在應(yīng)用服務(wù)器啟動時,為線程集合設(shè)置了10個最小線程數(shù)量,當(dāng)用戶任務(wù)需要獲取的線程數(shù)量突然增加,例如需要500個線程,此時最小線程數(shù)量明顯不夠使用,則應(yīng)用服務(wù)器會創(chuàng)建新的線程來更好的響應(yīng),但是因為計算機(jī)資源也是有限的,因此需要給個線程集合設(shè)定一個最大線程數(shù)量,比如設(shè)置最大線程數(shù)量為100,則即使超過100,也不會再在該線程集合中創(chuàng)建新的線程,因為再創(chuàng)建新的線程,會使得應(yīng)用服務(wù)器的服務(wù)能力下降。因此,設(shè)置最大線程數(shù)量是為了使應(yīng)用服務(wù)器在現(xiàn)有的服務(wù)能力范圍內(nèi)更好的工作。

步驟S202,當(dāng)確認(rèn)用戶任務(wù)需要獲取線程進(jìn)行執(zhí)行操作時,根據(jù)所述用戶任務(wù)的ID定位所述線程池中的所述線程集合。

在本申請優(yōu)選的實施例中,所述根據(jù)所述用戶任務(wù)的ID定位線程池中的線程集合,具體包括:

根據(jù)所述用戶任務(wù)的ID對所述線程池中的線程集合個數(shù)進(jìn)行取模,獲得模值,根據(jù)所述模值定位相應(yīng)的線程集合。從而使得不同的用戶任務(wù)定位到不同的相應(yīng)的線程集合中。使得不同的用戶任務(wù)并發(fā)獲取線程的過程中不需要進(jìn)行加鎖,提高了線程獲取的效率。

步驟S203,判斷所述線程集合中是否有空閑線程。

當(dāng)所述線程集合中有空閑線程時,執(zhí)行步驟S204;

當(dāng)所述線程集合中沒有空閑線程,執(zhí)行步驟S205。

步驟S204,將所述空閑線程返回給用戶任務(wù)。

步驟S205,判斷是否可以在所述線程集合中創(chuàng)建新的線程任務(wù)。

所述判斷依據(jù)為當(dāng)前執(zhí)行操作的用戶任務(wù)數(shù)小于為所述線程集合設(shè)置的 最大線程數(shù)量。

若可以在所述線程集合中創(chuàng)建新的線程任務(wù),則執(zhí)行步驟S206;

若不可以在所述線程集合中創(chuàng)建新的線程任務(wù),則執(zhí)行步驟S207。

步驟S206,創(chuàng)建一個線程供用戶任務(wù)使用。

步驟S207,判斷所述線程池中的其他線程集合中是否包含空閑線程。

若所述線程池中的其他線程集合中包含空閑線程,則執(zhí)行步驟S208;

若所述線程池中的其他線程集合中不包含空閑線程,則執(zhí)行步驟S209。

步驟S208,將所述空閑線程返回給用戶任務(wù),并記錄當(dāng)前用戶任務(wù)使用線程所屬的線程集合及其在所述線程池中的位置。

步驟S209,判斷是否可以在所述線程池中的其他線程集合中創(chuàng)建新的線程;

所述判斷依據(jù)為所述其他線程集合中的線程數(shù)是否小于為所述其他線程集合設(shè)置的最大線程數(shù)量。

若可以在所述線程池中的其他線程集合中創(chuàng)建新的線程,則執(zhí)行步驟S210;

若不可以在所述線程池中的其他線程集合中創(chuàng)建新的線程,則執(zhí)行步驟S211。

步驟S210,創(chuàng)建新的線程,將所述新的線程返回給用戶任務(wù),并記錄當(dāng)前用戶任務(wù)使用線程所屬的線程集合及其在所述線程池中的位置。

步驟S211,顯示當(dāng)前沒有可用線程的異常說明。

通過應(yīng)用本申請實施例所提出的技術(shù)方案,解決了現(xiàn)有技術(shù)在通過線程池并發(fā)獲得線程的時候,需要進(jìn)行加鎖判斷線程是否空閑,排隊獲取線程,從而導(dǎo)致獲取線程效率低下的問題。本申請實施例所提出的技術(shù)方案在應(yīng)用程序獲取線程池中的線程執(zhí)行操作時,不需要進(jìn)行加鎖,盡量減少了任務(wù)與任 務(wù)之間的資源爭用,提高了獲取執(zhí)行任務(wù)的線程的效率,進(jìn)而增強(qiáng)應(yīng)用程序的伸縮性和健壯性。

實施例三

基于與上述線程獲取方法實現(xiàn)流程同樣的申請構(gòu)思,本申請實施例中還提供了一種線程獲取設(shè)備,如圖3所示,所述設(shè)備包括:

線程管理模塊31,用于在應(yīng)用服務(wù)器啟動時,將線程池劃分為多個線程集合;

定位模塊32,用于當(dāng)確認(rèn)用戶任務(wù)需要從所述線程池中獲取線程進(jìn)行執(zhí)行操作時,在所述線程管理模塊31所劃分的各線程集合中,分別確定各待執(zhí)行用戶任務(wù)所歸屬的線程集合;

判斷模塊33,用于分別判斷所述定位模塊32所確定的各線程集合中是否有空閑線程;

處理模塊34,用于當(dāng)所述判斷模塊33判斷當(dāng)前線程集合中有空閑線程時,將所述空閑線程返回給歸屬到所述當(dāng)前線程集合的待執(zhí)行用戶任務(wù)。

在具體的應(yīng)用場景中,所述線程管理模塊31,還用于:

在將所述線程池劃分為多個線程集合之后,為各所述線程集合設(shè)置最小線程數(shù)量和最大線程數(shù)量;

為各所述線程集合創(chuàng)建最小線程數(shù)量的線程;

初始化包含所述最小線程數(shù)量的線程的各所述線程集合。

進(jìn)一步的,

所述判斷模塊33,還用于當(dāng)判斷所述當(dāng)前線程集合中沒有空閑線程時,判斷在所述當(dāng)前線程集合中執(zhí)行操作的用戶任務(wù)數(shù)量是否大于所述線程管理模塊31為所述線程集合設(shè)置的最大線程數(shù)量;

所述處理模塊34,還用于在所述判斷模塊33的判斷結(jié)果為沒有大于時, 在所述當(dāng)前線程集合中創(chuàng)建一個線程,供歸屬到所述當(dāng)前線程集合的待執(zhí)行用戶任務(wù)使用,或在所述判斷模塊33的判斷結(jié)果為大于時,根據(jù)預(yù)設(shè)的線程替換規(guī)則,判斷在所述線程池中的其他線程集合中是否可以為所述待執(zhí)行的用戶任務(wù)獲取線程,如果可以,則將獲取到的線程返回給所述待執(zhí)行用戶任務(wù),如果不可以,則返回異常提示消息。

在具體的應(yīng)用場景中,所述定位模塊32,具體用于:

分別獲取當(dāng)前所接收到的各待執(zhí)行用戶任務(wù)的ID;

分別根據(jù)所述各待執(zhí)行用戶任務(wù)的ID對所述線程管理模塊31在所述線程池中所劃分的線程集合個數(shù)進(jìn)行取模;

根據(jù)相應(yīng)的取模結(jié)果分別確定所述各待執(zhí)行用戶任務(wù)所歸屬的線程集合。

通過應(yīng)用本申請實施例所提出的技術(shù)方案,解決了現(xiàn)有技術(shù)在通過線程池并發(fā)獲得線程的時候,需要進(jìn)行加鎖判斷線程是否空閑,排隊獲取線程,從而導(dǎo)致獲取線程效率低下的問題。本申請實施例所提出的技術(shù)方案在應(yīng)用程序獲取線程池中的線程執(zhí)行操作時,不需要進(jìn)行加鎖,盡量減少了任務(wù)與任務(wù)之間的資源爭用,提高了獲取執(zhí)行任務(wù)的線程的效率,進(jìn)而增強(qiáng)應(yīng)用程序的伸縮性和健壯性。

其中,本申請裝置的各個模塊可以集成于一體,也可以分離部署。上述模塊可以合并為一個模塊,也可以進(jìn)一步拆分成多個子模塊。

通過以上的實施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到本申請可借助軟件加必需的通用硬件平臺的方式來實現(xiàn),當(dāng)然也可以通過硬件,但很多情況下前者是更佳的實施方式。基于這樣的理解,本申請的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機(jī)軟件產(chǎn)品存儲在一個存儲介質(zhì)中,包括若干指令用以使得一臺計算機(jī)設(shè)備(可以是個人計算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本申請各個實 施例所述的方法。本領(lǐng)域技術(shù)人員可以理解附圖只是一個優(yōu)選實施例的示意圖,附圖中的模塊或流程并不一定是實施本申請所必須的。本領(lǐng)域技術(shù)人員可以理解實施例中的裝置中的模塊可以按照實施例描述進(jìn)行分布于實施例的裝置中,也可以進(jìn)行相應(yīng)變化位于不同于本實施例的一個或多個裝置中。上述實施例的模塊可以合并為一個模塊,也可以進(jìn)一步拆分成多個子模塊。上述本申請實施例序號僅僅為了描述,不代表實施例的優(yōu)劣。以上公開的僅為本申請的幾個具體實施例,但是,本申請并非局限于此,任何本領(lǐng)域的技術(shù)人員能思之的變化都應(yīng)落入本申請的保護(hù)范圍。

當(dāng)前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1
农安县| 炎陵县| 西宁市| 济南市| 贺州市| 周口市| 绥中县| 莲花县| 日喀则市| 酒泉市| 开鲁县| 石狮市| 观塘区| 景宁| 龙泉市| 汝州市| 保亭| 普宁市| 伊通| 新田县| 平遥县| 城市| 理塘县| 班戈县| 佛教| 泰兴市| 安义县| 德保县| 攀枝花市| 太康县| 临猗县| 内江市| 潮安县| 闽侯县| 海淀区| 祥云县| 花莲县| 隆子县| 凤凰县| 安义县| 镇沅|