本篇內(nèi)容主要講解“Java中Semaphore的使用方法”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“Java中Semaphore的使用方法”吧!
成都創(chuàng)新互聯(lián)公司主要從事網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)利川,10年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):13518219792
Semaphore的作用是控制線程的并發(fā)數(shù)量。在簡(jiǎn)單點(diǎn)的解釋就是如果我們開始了10個(gè)線程都在處理任務(wù),如果我們用到的Semaphore,那么可以讓這10個(gè)并發(fā)任務(wù)執(zhí)行的時(shí)候可以只同時(shí)執(zhí)行2個(gè)。因?yàn)镾emaphore的構(gòu)造方法里需要傳遞一個(gè)int類型的參數(shù),這個(gè)參數(shù)就是控制線程可以允許的同時(shí)并發(fā)數(shù)。
上述代碼我們同時(shí)開啟了3個(gè)線程,因?yàn)槲覀儧]有加同步方法所以這3個(gè)開啟的線程是異步執(zhí)行的。那么在實(shí)際的任務(wù)開發(fā)中,如果我們需要控制多線程的并發(fā)數(shù)量應(yīng)該怎么辦呢?例如我們?cè)诓僮鱅O的時(shí)候可能會(huì)因?yàn)橄到y(tǒng)的內(nèi)存或者磁盤等因素,導(dǎo)致我們的CPU占有率很高,這時(shí)我們就要調(diào)整線程的同時(shí)并發(fā)數(shù),否則系統(tǒng)可能會(huì)卡死。這時(shí)我們就會(huì)用到Semaphore。它的使用方法也比較簡(jiǎn)單,當(dāng)調(diào)用acquire()方法時(shí),就是會(huì)獲取由Semaphore頒發(fā)的許可證,當(dāng)調(diào)用release()方法時(shí)就會(huì)把獲取的許可證歸還。Semaphore中的許可證數(shù)量是由創(chuàng)建Semaphore對(duì)象的構(gòu)造方法的參數(shù)決定的。參數(shù)值是多少,就有多少個(gè)許可證,有多少個(gè)許可證,就可以同時(shí)有多少個(gè)線程并發(fā)執(zhí)行,因?yàn)闆]有獲得許可證的線程則不會(huì)執(zhí)行。
我們看輸出雖然我們開啟了3個(gè)線程,但同時(shí)執(zhí)行的線程任務(wù)只有2個(gè),原因就是我們?cè)O(shè)置的Semaphore構(gòu)造函數(shù)的參數(shù)為2。也就是說同時(shí)執(zhí)行的任務(wù)只能是2個(gè),如果有一個(gè)線程的任務(wù)已經(jīng)執(zhí)行完了,那么另一個(gè)線程才會(huì)執(zhí)行。原因是上一個(gè)線程已經(jīng)將許可證歸還了,當(dāng)前線程可以重新獲取到許可證了。
到此,相信大家對(duì)“Java中Semaphore的使用方法”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!