(1)availablePermits()返回Semaphore對(duì)象中當(dāng)前可用的許可數(shù)聂薪,此方法通常用于調(diào)試部逮,應(yīng)為許可的數(shù)量有可能實(shí)時(shí)在改變枷恕,并不是固定的數(shù)量。
(2)drainPermits()可獲取并返回立即可用的所有許可數(shù)寻咒,并將可用許可置位0
(3)方法getQueueLength()的作用是取得等待許可的線程數(shù)
(4)方法hasQueuedThreads()的作用是判斷有沒(méi)有線程在等待這個(gè)許可
這兩個(gè)方法通常都是在判斷當(dāng)前有沒(méi)有等待許可的線程信息時(shí)使用哮翘。
可以看到線程的個(gè)數(shù)遞減的狀態(tài)。
公平與非公平信號(hào)量的測(cè)試:
有些時(shí)候毛秘,獲得許可的順序與線程啟動(dòng)的順序有關(guān)饭寺,這時(shí)信號(hào)量就要分為公平與非公平的。所謂的公平信號(hào)量是獲得的鎖的順序與線程啟動(dòng)的順序有關(guān)叫挟,但不代表100%地獲得信號(hào)量艰匙,僅僅是在概率上能得到保證,而非公平的信號(hào)量就是無(wú)關(guān)的了抹恳。
無(wú)序打釉蹦:
將isFair=true;
有序打印:
(5)方法tryAcquire的使用
該方法的作用是嘗試地獲取1個(gè)許可奋献,如果獲取不到許可返回false健霹,此方法通常與if語(yǔ)句結(jié)合使用,其具有無(wú)阻塞的特點(diǎn)瓶蚂,無(wú) 阻塞的特點(diǎn)可以使用現(xiàn)場(chǎng)不至于在同步處一直持續(xù)等待的狀態(tài)糖埋,如果if語(yǔ)句判斷不成立則會(huì)繼續(xù)走else語(yǔ)句,程序繼續(xù)向下走窃这。