public class Semaphore extends Object implements Serializable
acquire()ใฏใใใผใใใใๅฉ็จๅฏ่ฝใซใชใใพใงๅฟ
่ฆใซๅฟใใฆใใญใใฏใใใใฎๅพใใผใใใใๅๅพใใพใใ ๅrelease()ใฏใใผใใใใ่ฟฝๅ ใใๅ ดๅใซใใฃใฆใฏใใญใใฏใใฆใใๅๅพๅดใ่งฃๆพใใพใใ ใใ ใใๅฎ้ใฎใใผใใใใปใชใใธใงใฏใใฏไฝฟ็จใใใพใใใSemaphoreใฏๅใซๅฉ็จๅฏ่ฝใชๅๆฐใฎใซใฆใณใใไฟๆใใใใใซๅฟใใๅฆ็ใ่กใใพใใ
ใปใใใฉใฏใ็ฉ็็ใพใใฏ่ซ็็ใชไธ้จใฎใชใฝใผในใซใขใฏใปในๅฏ่ฝใชในใฌใใๆฐใๅถ้ใใใใใซใใไฝฟ็จใใใพใใ ใใจใใฐใๆฌกใฎใฏใฉในใงใฏใใปใใใฉใไฝฟ็จใใฆ้ ็ฎใฎใใผใซใธใฎใขใฏใปในใๅถๅพกใใพใใ
class Pool {
private static final int MAX_AVAILABLE = 100;
private final Semaphore available = new Semaphore(MAX_AVAILABLE, true);
public Object getItem() throws InterruptedException {
available.acquire();
return getNextAvailableItem();
}
public void putItem(Object x) {
if (markAsUnused(x))
available.release();
}
// Not a particularly efficient data structure; just for demo
protected Object[] items = ... whatever kinds of items being managed
protected boolean[] used = new boolean[MAX_AVAILABLE];
protected synchronized Object getNextAvailableItem() {
for (int i = 0; i < MAX_AVAILABLE; ++i) {
if (!used[i]) {
used[i] = true;
return items[i];
}
}
return null; // not reached
}
protected synchronized boolean markAsUnused(Object item) {
for (int i = 0; i < MAX_AVAILABLE; ++i) {
if (item == items[i]) {
if (used[i]) {
used[i] = false;
return true;
} else
return false;
}
}
return false;
}
}
้
็ฎใๅๅพใใๅใซใๅในใฌใใใฏใปใใใฉใใใ้
็ฎใๅฉ็จๅฏ่ฝใงใใใใจใไฟ่จผใใใใผใใใใๅๅพใใๅฟ
่ฆใใใใพใใ ้
็ฎใฎๅฆ็ใๅฎไบใใใจในใฌใใใฏใใผใซใซๆปใใใใผใใใใใปใใใฉใซ่ฟใใใใปใใฎในใฌใใใใใฎ้
็ฎใๅๅพใงใใใใใซใชใใพใใ acquire()ใๅผใณๅบใใใใจใใๅๆใญใใฏใฏไฟๆใใใชใใใจใซๆณจๆใใฆใใ ใใใๅๆใญใใฏใไฟๆใใใใจใ้
็ฎใใใผใซใซ่ฟใใใชใใชใใใใงใใ ใปใใใฉใฏใใใผใซใธใฎใขใฏใปในใๅถ้ใใๅฟ
่ฆใฎใใๅๆใใใใผใซ่ชไฝใฎไธ่ฒซๆงใ็ถญๆใใใใใซๅฟ
่ฆใชๅๆใใใฏๅ้ขใใฆใซใใปใซๅใใพใใ
ๅคใ1ใซๅๆๅใใใใปใใใฉใฏใๅฉ็จใงใใใใผใใใใๆๅคงใง1ๅใงใใใปใใใฉใจใใฆไฝฟ็จใใใใใใ็ธไบๆไปใญใใฏใจใใฆๅฉ็จใงใใพใใ ใใใฏไธ่ฌ็ใซใฏ2้ฒๅใปใใใฉใจๅผใฐใใพใใๅฉ็จๅฏ่ฝใชใใผใใใใ1ใคใใใพใใฏๅฉ็จๅฏ่ฝใชใใผใใใใใชใใใฎ2ใคใฎ็ถๆ
ใใใชใใใใงใใ ใใฎใใใซไฝฟ็จใใใๅ ดๅใๅคใใฎLockๅฎ่ฃ
ใจใฏ็ฐใชใใ2้ฒๅใปใใใฉใซใฏใๆๆ่
ไปฅๅคใฎในใฌใใใงใญใใฏใ่งฃๆพใงใใใจใใ็นๆงใใใใพใ(ใปใใใฉใซใฏๆๆๆจฉใฎๆฆๅฟตใใชใใใ)ใ ใใใฏใใใใใญใใฏใฎๅๅพฉใฎใใใช็นๆฎใชใณใณใใญในใใงไพฟๅฉใงใใ
ใใฎใฏใฉในใฎใณใณในใใฉใฏใฟใฏใใชใใทใงใณใงๅ
ฌๅนณๆงใใฉใกใผใฟใๅใๅ
ฅใใพใใ falseใซ่จญๅฎใใใจใใใฎใฏใฉในใฏในใฌใใใใใผใใใใๅๅพใใ้ ๅบใซใคใใฆไฟ่จผใใพใใใ ็นใซใใใผใธ(barging)ใ่จฑๅฏใใใฆใใพใใใคใพใใacquire()ใๅผใณๅบใในใฌใใใซใๅพ
ๆฉใใฆใใในใฌใใใใๅ
ใซใใผใใใใๅฒใๅฝใฆใใใจใใงใใพใใ่ซ็็ใซใฏใๆฐใใในใฌใใใใๅพ
ๆฉไธญใฎในใฌใใใฎใญใฅใผใฎๅ
้ ญใซ้
็ฝฎใใใพใใ ๅ
ฌๅนณๆงใtrueใซ่จญๅฎใใใใจใใปใใใฉใฏใacquireใกใฝใใใฎใใใใใๅผใณๅบใในใฌใใใใใใใใฎใกใฝใใใฎๅผๅบใใๅฆ็ใใใ้ ๅบ(ๅ
ๅ
ฅใๅ
ๅบใใFIFO)ใงใใผใใใใๅๅพใใใใใซ้ธๆใใใใใจใไฟ่จผใใพใใ FIFO้ ๅบไปใใฏใๅฟ
็ถ็ใซใใใใฎใกใฝใใๅ
ใฎ็นๅฎใฎๅ
้จๅฎ่กใใคใณใใซ้ฉ็จใใใพใใ ใใฎใใใใใในใฌใใใๅฅใฎในใฌใใใใๅใซacquireใๅผใณๅบใใฆใใใใฎในใฌใใใใใใจใซ้ ๅบไปใใใคใณใใซๅฐ้ใใๅฏ่ฝๆงใใใใพใใใพใใใกใฝใใใใใฎๅพฉๅธฐๆใๅๆงใงใใ ใพใใๆ้ๆๅฎใฎใชใtryAcquireใกใฝใใใฏๅ
ฌๅนณๆงใฎ่จญๅฎใซๅพใใพใใใใๅฉ็จๅฏ่ฝใชใใผใใใใใในใฆๅๅพใใใใจใซใๆณจๆใใฆใใ ใใใ
้ๅธธใใชใฝใผในใปใขใฏใปในใๅถๅพกใใใใใซไฝฟ็จใใใใปใใใฉใฏใใชใฝใผในใธใฎใขใฏใปในใใงใใชใในใฌใใใใชใใใใๅ ฌๅนณใซๅๆๅใใใๅฟ ่ฆใใใใพใใ ใปใใฎ็จฎ้กใฎๅๆๅถๅพกใซใปใใใฉใไฝฟ็จใใๅ ดๅใฏใๅ ฌๅนณๆงใ่ๆ ฎใใใใใไธๅ ฌๅนณใช้ ๅบไปใใซใใในใซใผใใใใฎๅฉ็นใฎใปใใใใฐใใฐ้่ฆใซใชใใพใใ
ใใฎใฏใฉในใฏใพใใ่คๆฐใฎใใผใใใใซๅฏพใใฆๅๆใซacquireใreleaseใๅฎ่กใใใใใฎ็ฐกๆใกใฝใใใๆไพใใพใใ ๅ
ฌๅนณๆงใtrueใซ่จญๅฎใใใซใใใใฎใกใฝใใใไฝฟ็จใใใจใ็กๆ้ใซๅปถๆใใใๅฑ้บใๅขใใใจใซๆณจๆใใฆใใ ใใใ
ใกใขใชใผๆดๅๆงๅนๆ: release()ใชใฉใฎใ่งฃๆพใใกใฝใใใๅผใณๅบใๅใฎในใฌใใๅ
ใฎใขใฏใทใงใณใฏใๅฅใฎในใฌใใๅ
ใฎacquire()ใชใฉใฎๆญฃๅธธ็ตไบใใใๅๅพใใกใฝใใใซ็ถใใขใฏใทใงใณใฎๅใซ็บ็ใใพใใ
| ใณใณในใใฉใฏใฟ | ่ชฌๆ |
|---|---|
Semaphore(int permits) |
ๆๅฎใใใๆฐใฎใใผใใใใจไธๅ
ฌๅนณใชๅ
ฌๅนณๆง่จญๅฎใไฝฟ็จใใฆใ
Semaphoreใไฝๆใใพใใ |
Semaphore(int permits, boolean fair) |
ๆๅฎใใใๆฐใฎใใผใใใใจๆๅฎใใใๅ
ฌๅนณๆง่จญๅฎใไฝฟ็จใใฆใ
Semaphoreใไฝๆใใพใใ |
| ไฟฎ้ฃพๅญใจๅ | ใกใฝใใ | ่ชฌๆ |
|---|---|---|
void |
acquire() |
ใใฎใปใใใฉใใใใผใใใใๅๅพใใพใใใใผใใใใๅฉ็จๅฏ่ฝใซใชใใใใพใใฏในใฌใใใๅฒใ่พผใฟใใใใพใงใใญใใฏใใพใใ
|
void |
acquire(int permits) |
ใใฎใปใใใฉใใๆๅฎใใใๆฐใฎใใผใใใใๅๅพใใพใใใในใฆใฎใใผใใใใๅฉ็จๅฏ่ฝใซใชใใใใพใใฏในใฌใใใๅฒใ่พผใฟใใใใพใงใใญใใฏใใพใใ
|
void |
acquireUninterruptibly() |
ใใฎใปใใใฉใใใใผใใใใๅๅพใใพใใใใผใใใใๅฉ็จๅฏ่ฝใซใชใใพใงใใญใใฏใใพใใ
|
void |
acquireUninterruptibly(int permits) |
ใใฎใปใใใฉใใๆๅฎใใใๆฐใฎใใผใใใใๅๅพใใพใใใในใฆใฎใใผใใใใๅฉ็จๅฏ่ฝใซใชใใพใงใใญใใฏใใพใใ
|
int |
availablePermits() |
ใใฎใปใใใฉใง็พๅจๅฉ็จๅฏ่ฝใชใใผใใใใฎๆฐใ่ฟใใพใใ
|
int |
drainPermits() |
ใใใซๅฉ็จๅฏ่ฝใชใในใฆใฎใใผใใใใๅๅพใใฆ่ฟใใพใใ
|
protected Collection<Thread> |
getQueuedThreads() |
ใใผใใใใฎๅๅพใๅพ
ๆฉใใฆใใในใฌใใใๅซใใณใฌใฏใทใงใณใ่ฟใใพใใ
|
int |
getQueueLength() |
ใใผใใใใฎๅๅพใๅพ
ๆฉใใฆใใในใฌใใใฎๆจๅฎๆฐใ่ฟใใพใใ
|
boolean |
hasQueuedThreads() |
ใใผใใใใฎๅๅพใๅพ
ๆฉไธญใฎในใฌใใใๅญๅจใใใใฉใใใ็
งไผใใพใใ
|
boolean |
isFair() |
ใใฎใปใใใฉใงๅ
ฌๅนณๆงใtrueใซ่จญๅฎใใใฆใใๅ ดๅใฏ
trueใ่ฟใใพใใ |
protected void |
reducePermits(int reduction) |
ๆๅฎใใใreductionใฎๆฐใ ใๅฉ็จๅฏ่ฝใชใใผใใใใฎๆฐใๆธใใใพใใ
|
void |
release() |
ใใผใใใใ่งฃๆพใใใปใใใฉใซๆปใใพใใ
|
void |
release(int permits) |
ๆๅฎใใใๆฐใฎใใผใใใใ่งฃๆพใใใปใใใฉใซๆปใใพใใ
|
String |
toString() |
ใปใใใฉใใใณใใฎ็ถๆ
ใ่ญๅฅใใๆๅญๅใ่ฟใใพใใ
|
boolean |
tryAcquire() |
ใใผใใใใๅผๅบใๆใซๅฉ็จๅฏ่ฝใชๅ ดๅใซ้ใใใใฎใปใใใฉใใใใผใใใใๅๅพใใพใใ
|
boolean |
tryAcquire(int permits) |
ๆๅฎใใใๆฐใฎใใผใใใใๅผๅบใๆใซๅฉ็จๅฏ่ฝใชๅ ดๅใซ้ใใใใใใในใฆใฎใใผใใใใๅๅพใใพใใ
|
boolean |
tryAcquire(int permits, long timeout, TimeUnit unit) |
ๆๅฎใใใๅพ
ๆฉๆ้ๅ
ใงๆๅฎใใใๆฐใฎใใผใใใใๅฉ็จๅฏ่ฝใงใใใ็พๅจใฎในใฌใใใงๅฒใ่พผใฟใ็บ็ใใฆใใชใๅ ดๅใซใใใฎใปใใใฉใใๆๅฎใใใๆฐใฎใใผใใใใๅๅพใใพใใ
|
boolean |
tryAcquire(long timeout, TimeUnit unit) |
ๆๅฎใใใๅพ
ๆฉๆ้ๅ
ใงใใผใใใใๅฉ็จๅฏ่ฝใซใชใใ็พๅจใฎในใฌใใใงๅฒใ่พผใฟใ็บ็ใใฆใใชใๅ ดๅใซใใใฎใปใใใฉใใใใผใใใใๅๅพใใพใใ
|
public Semaphore(int permits)
Semaphoreใไฝๆใใพใใpermits - ๅฉ็จๅฏ่ฝใชใใผใใใใฎๅๆใฎๆฐใ ใใฎๅคใฏ่ฒ ใซใใใใจใๅฏ่ฝใงใใใฎๅ ดๅใฏๅๅพใกใฝใใใ่จฑๅฏใๅใๅใๅใซ่งฃๆพใ็บ็ใใๅฟ
่ฆใใใใ public Semaphore(int permits,
boolean fair)
Semaphoreใไฝๆใใพใใpermits - ๅฉ็จๅฏ่ฝใชใใผใใใใฎๅๆใฎๆฐใ ใใฎๅคใฏ่ฒ ใซใใใใจใๅฏ่ฝใงใใใฎๅ ดๅใฏๅๅพใกใฝใใใ่จฑๅฏใๅใๅใๅใซ่งฃๆพใ็บ็ใใๅฟ
่ฆใใใใ fair - ใใฎใปใใใฉใ็ซถๅๆใซใใผใใใใฎ่จฑๅฏใๅ
ๅ
ฅใๅ
ๅบใใงไฟ่จผใใๅ ดๅใฏtrueใใใไปฅๅคใฎๅ ดๅใฏfalsepublic void acquire()
throws InterruptedException
ใใผใใใใๅฉ็จๅฏ่ฝใชๅ ดๅใฏใใผใใใใๅๅพใใฆใใใซๅพฉๅธฐใใใใใๅฉ็จๅฏ่ฝใชใใผใใใใฎๆฐใฏ1ใคใใคๆธใใพใใ
ใใผใใใใๅฉ็จๅฏ่ฝใงใชใๅ ดๅใ็พๅจใฎในใฌใใใฏในใฌใใใฎในใฑใธใฅใผใชใณใฐใซ้ขใใฆ็กๅนใซใชใใๆฌกใฎ2ใคใฎใใใใใ่ตทใใใพใงๅพ ๆฉใใพใใ
release()ใกใฝใใใๅผใณๅบใใ็พๅจใฎในใฌใใใๆฌกใซใใผใใใใๅฒใๅฝใฆใใใในใฌใใใซใชใใ
็พๅจใฎในใฌใใใงใ
InterruptedExceptionใในใญใผใใใ็พๅจใฎในใฌใใใฎๅฒ่พผใฟในใใผใฟในใใฏใชใขใใใพใใInterruptedException - ็พๅจใฎในใฌใใใงๅฒ่พผใฟใ็บ็ใใๅ ดๅpublic void acquireUninterruptibly()
ใใผใใใใๅฉ็จๅฏ่ฝใชๅ ดๅใฏใใผใใใใๅๅพใใฆใใใซๅพฉๅธฐใใใใใๅฉ็จๅฏ่ฝใชใใผใใใใฎๆฐใฏ1ใคใใคๆธใใพใใ
ใใผใใใใไฝฟ็จใงใใชใๅ ดๅใ็พๅจใฎในใฌใใใฏในใฌใใใฎในใฑใธใฅใผใชใณใฐใฎ็ฎ็ใซๅฏพใใฆ็กๅนใซใชใใใปใใฎใใใใใฎในใฌใใใใใฎใปใใใฉใฎrelease()ใกใฝใใใๅผใณๅบใใฆใ็พๅจใฎในใฌใใใๆฌกใซใใผใใใใๅฒใๅฝใฆใใใในใฌใใใซใชใใพใงใ็พๅจใฎในใฌใใใฏๅพ
ๆฉใใพใใ
ใใผใใใใฎๅพ ๆฉไธญใซ็พๅจใฎในใฌใใใๅฒใ่พผใฟใใใใจใๅพ ๆฉใฏ็ถ่กใใพใใใในใฌใใใซใใผใใใใๅฒใๅฝใฆใใใใฟใคใใณใฐใฏใๅฒ่พผใฟใ็บ็ใใชใใฃใๅ ดๅใซใใผใใใใๅใๅใใฏใใฎใฟใคใใณใฐใจใฏ็ฐใชใใใจใใใใพใใ ในใฌใใใใใฎใกใฝใใใใๅพฉๅธฐใใใจใใใฎๅฒ่พผใฟ็ถๆ ใ่จญๅฎใใใพใใ
public boolean tryAcquire()
ใใผใใใใๅฉ็จๅฏ่ฝใชๅ ดๅใฏใใผใใใใๅๅพใใฆๅคtrueใงใใใซๅพฉๅธฐใใใใใๅฉ็จๅฏ่ฝใชใใผใใใใฎๆฐใฏ1ใคใใคๆธใใพใใ
ใใผใใใใๅฉ็จๅฏ่ฝใงใชใๅ ดๅใใใฎใกใฝใใใฏๅคfalseใงใใใซๅพฉๅธฐใใพใใ
ใใฎใปใใใฉใๅ
ฌๅนณ้ ๅบไปใใใชใทใผใไฝฟ็จใใใใใซ่จญๅฎใใใฆใใๅ ดๅใงใใใใผใใใใๅฉ็จๅฏ่ฝใงใใใฐใใปใใฎในใฌใใใ็พๅจๅพ
ๆฉใใฆใใใใฉใใใซ้ขไฟใชใใtryAcquire()ใฎๅผๅบใใงใใใซใใผใใใใๅๅพใใพใใ ใใฎใใใผใธใ(barging)ๅไฝใซใใๅ
ฌๅนณๆงใๅคฑใใใใจใฏ่จใใใใใฏ็นๅฎใฎ็ถๆณไธใงๆ็จใงใใ ๅ
ฌๅนณๆง่จญๅฎใๅฐ้ใใๅ ดๅใฏใใปใผ็ญไพกใชtryAcquire(0, TimeUnit.SECONDS) ใไฝฟ็จใใพใ(ใใใๅฒ่พผใฟใๆคๅบใใ)ใ
trueใใใไปฅๅคใฎๅ ดๅใฏfalsepublic boolean tryAcquire(long timeout,
TimeUnit unit)
throws InterruptedException
ใใผใใใใๅฉ็จๅฏ่ฝใชๅ ดๅใฏใใผใใใใๅๅพใใฆๅคtrueใงใใใซๅพฉๅธฐใใใใใๅฉ็จๅฏ่ฝใชใใผใใใใฎๆฐใฏ1ใคใใคๆธใใพใใ
ใใผใใใใๅฉ็จๅฏ่ฝใงใชใๅ ดๅใ็พๅจใฎในใฌใใใฏในใฌใใใฎในใฑใธใฅใผใชใณใฐใซ้ขใใฆ็กๅนใซใชใใๆฌกใฎ3ใคใฎใใใใใ่ตทใใใพใงๅพ ๆฉใใพใใ
release()ใกใฝใใใๅผใณๅบใใ็พๅจใฎในใฌใใใๆฌกใซใใผใใใใๅฒใๅฝใฆใใใในใฌใใใซใชใใ
ใใผใใใใๅๅพใใใๅ ดๅใฏใๅคtrueใ่ฟใใใพใใ
็พๅจใฎในใฌใใใงใ
InterruptedExceptionใในใญใผใใใ็พๅจใฎในใฌใใใฎๅฒ่พผใฟในใใผใฟในใใฏใชใขใใใพใใ
ๆๅฎใใใๅพ
ๆฉๆ้ใ็ต้ใใใจใๅคfalseใ่ฟใใใพใใ ๆ้ใใผใญใพใใฏใใใใๅฐใใๅ ดๅใใกใฝใใใฏๅพ
ๆฉใใพใใใ
timeout - ใใผใใใใฎๆ้ทๅพ
ๆฉๆ้unit - timeoutๅผๆฐใฎๆ้ๅไฝtrueใใใผใใใใๅๅพใใใๅใซๅพ
ๆฉๆ้ใ็ต้ใใๅ ดๅใฏfalseInterruptedException - ็พๅจใฎในใฌใใใงๅฒ่พผใฟใ็บ็ใใๅ ดๅpublic void release()
ใใผใใใใ่งฃๆพใใใจใๅฉ็จๅฏ่ฝใชใใผใใใใฎๆฐใ1ใคใใคๅขใใพใใ ใใใคใใฎในใฌใใใใใผใใใใๅๅพใใใใจ่ฉฆใฟใฆใใๅ ดๅใฏใใใฎไธญใฎ1ใคใฎในใฌใใใ้ธๆใใใ่งฃๆพใใใใฐใใใฎใใผใใใใไธใใใใพใใ ใใฎในใฌใใใฏใในใฌใใใฎในใฑใธใฅใผใชใณใฐใซ้ขใใฆ(ใตใใใณ)ๆๅนใซใชใใพใใ
ใใผใใใใ่งฃๆพใใในใฌใใใฏใacquire()ใฎๅผๅบใใงใใฎใใผใใใใๅๅพใใฆใใๅฟ
่ฆใฏใใใพใใใ ใปใใใฉใฎ้ฉๅใชไฝฟ็จๆณใฏใใขใใชใฑใผใทใงใณใงใฎใใญใฐใฉใใณใฐ่ฆ็ดใง็ขบ็ซใใใพใใ
public void acquire(int permits)
throws InterruptedException
ๆๅฎใใใๆฐใฎใใผใใใใๅฉ็จๅฏ่ฝใชๅ ดๅใฏใใผใใใใๅๅพใใฆใใใซๅพฉๅธฐใใใใใๅฉ็จๅฏ่ฝใชใใผใใใใฎๆฐใฏๆๅฎใใใๆฐใใคๆธใใพใใ
ๅๅใชๆฐใฎใใผใใใใๅฉ็จๅฏ่ฝใงใชใๅ ดๅใ็พๅจใฎในใฌใใใฏในใฌใใใฎในใฑใธใฅใผใชใณใฐใซ้ขใใฆ็กๅนใซใชใใๆฌกใฎ2ใคใฎใใใใใ่ตทใใใพใงๅพ ๆฉใใพใใ
releaseใกใฝใใใฎใใใใใๅผใณๅบใใ็พๅจใฎในใฌใใใๆฌกใซใใผใใใใๅฒใๅฝใฆใใใในใฌใใใซใชใใๅฉ็จๅฏ่ฝใชใใผใใใใฎๆฐใใใฎ่ฆๆฑใๆบใใใ
็พๅจใฎในใฌใใใงใ
InterruptedExceptionใในใญใผใใใ็พๅจใฎในใฌใใใฎๅฒ่พผใฟในใใผใฟในใใฏใชใขใใใพใใ ใใฎในใฌใใใซๅฒใๅฝใฆใใใใฏใใ ใฃใใในใฆใฎใใผใใใใฏใrelease()ใฎๅผๅบใใงใใผใใใใๅฉ็จๅฏ่ฝใซใชใฃใใใฎใใใซใใใผใใใใฎๅๅพใ่ฉฆใฟใๅฅใฎในใฌใใใซๅฒใๅฝใฆใใใพใใ permits - ๅๅพใใใใผใใใใฎๆฐInterruptedException - ็พๅจใฎในใฌใใใงๅฒ่พผใฟใ็บ็ใใๅ ดๅIllegalArgumentException - permitsใ่ฒ ใงใใๅ ดๅpublic void acquireUninterruptibly(int permits)
ๆๅฎใใใๆฐใฎใใผใใใใๅฉ็จๅฏ่ฝใชๅ ดๅใฏใใผใใใใๅๅพใใฆใใใซๅพฉๅธฐใใใใใๅฉ็จๅฏ่ฝใชใใผใใใใฎๆฐใฏๆๅฎใใใๆฐใใคๆธใใพใใ
ๅๅใชๆฐใฎใใผใใใใๅฉ็จๅฏ่ฝใงใชใๅ ดๅใ็พๅจใฎในใฌใใใฏในใฌใใใฎในใฑใธใฅใผใชใณใฐใซ้ขใใฆ็กๅนใซใชใใๅฅใฎในใฌใใใใใฎใปใใใฉใซๅฏพใใฆreleaseใกใฝใใใฎใใใใใๅผใณๅบใใ็พๅจใฎในใฌใใใๆฌกใซใใผใใใใๅฒใๅฝใฆใใใในใฌใใใซใชใใๅฉ็จๅฏ่ฝใชใใผใใใใฎๆฐใใใฎ่ฆๆฑใๆบใใใพใงใ็พๅจใฎในใฌใใใฏๅพ
ๆฉใใพใใ
็พๅจใฎในใฌใใใใใผใใใใฎๅพ ๆฉไธญใซๅฒใ่พผใพใใๅ ดๅใๅพ ๆฉใ็ถ่กใใพใใใญใฅใผๅ ใงใฎ็พๅจใฎในใฌใใใฎไฝ็ฝฎใซใฏๅฝฑ้ฟใใใพใใใ ในใฌใใใใใฎใกใฝใใใใๅพฉๅธฐใใใจใใใฎๅฒ่พผใฟ็ถๆ ใ่จญๅฎใใใพใใ
permits - ๅๅพใใใใผใใใใฎๆฐIllegalArgumentException - permitsใ่ฒ ใงใใๅ ดๅpublic boolean tryAcquire(int permits)
ๆๅฎใใใๆฐใฎใใผใใใใๅฉ็จๅฏ่ฝใชๅ ดๅใฏใใผใใใใๅๅพใใฆๅคtrueใงใใใซๅพฉๅธฐใใใใใๅฉ็จๅฏ่ฝใชใใผใใใใฎๆฐใฏๆๅฎใใใๆฐใใคๆธใใพใใ
ๅๅใชๆฐใฎใใผใใใใๅฉ็จๅฏ่ฝใงใชใๅ ดๅใใใฎใกใฝใใใฏๅคfalseใงใใใซๅพฉๅธฐใใๅฉ็จๅฏ่ฝใชใใผใใใใฎๆฐใฏๅคๅใใพใใใ
ใใฎใปใใใฉใๅ
ฌๅนณ้ ๅบไปใใใชใทใผใไฝฟ็จใใใใใซ่จญๅฎใใใฆใใๅ ดๅใงใใใใผใใใใๅฉ็จๅฏ่ฝใงใใใฐใใปใใฎในใฌใใใ็พๅจๅพ
ๆฉใใฆใใใใฉใใใซ้ขไฟใชใใtryAcquireใฎๅผๅบใใงใใใซใใผใใใใๅๅพใใพใใ ใใฎใใใผใธใ(barging)ๅไฝใซใใๅ
ฌๅนณๆงใๅคฑใใใใจใฏ่จใใใใใฏ็นๅฎใฎ็ถๆณไธใงๆ็จใงใใ ๅ
ฌๅนณๆง่จญๅฎใๅฐ้ใใๅ ดๅใฏใใปใผ็ญไพกใชtryAcquire(permits, 0, TimeUnit.SECONDS) ใไฝฟ็จใใพใ(ใใใๅฒ่พผใฟใๆคๅบใใ)ใ
permits - ๅๅพใใใใผใใใใฎๆฐtrueใใใไปฅๅคใฎๅ ดๅใฏfalseIllegalArgumentException - permitsใ่ฒ ใงใใๅ ดๅpublic boolean tryAcquire(int permits,
long timeout,
TimeUnit unit)
throws InterruptedException
ๆๅฎใใใๆฐใฎใใผใใใใๅฉ็จๅฏ่ฝใชๅ ดๅใฏใใผใใใใๅๅพใใฆๅคtrueใงใใใซๅพฉๅธฐใใใใใๅฉ็จๅฏ่ฝใชใใผใใใใฎๆฐใฏๆๅฎใใใๆฐใใคๆธใใพใใ
ๅๅใชๆฐใฎใใผใใใใๅฉ็จๅฏ่ฝใงใชใๅ ดๅใ็พๅจใฎในใฌใใใฏในใฌใใใฎในใฑใธใฅใผใชใณใฐใซ้ขใใฆ็กๅนใซใชใใๆฌกใฎ3ใคใฎใใใใใ่ตทใใใพใงๅพ ๆฉใใพใใ
releaseใกใฝใใใฎใใใใใๅผใณๅบใใ็พๅจใฎในใฌใใใๆฌกใซใใผใใใใๅฒใๅฝใฆใใใในใฌใใใซใชใใๅฉ็จๅฏ่ฝใชใใผใใใใฎๆฐใใใฎ่ฆๆฑใๆบใใใ
ใใผใใใใๅๅพใใใๅ ดๅใฏใๅคtrueใ่ฟใใใพใใ
็พๅจใฎในใฌใใใงใ
InterruptedExceptionใในใญใผใใใ็พๅจใฎในใฌใใใฎๅฒ่พผใฟในใใผใฟในใใฏใชใขใใใพใใ ใใฎในใฌใใใซๅฒใๅฝใฆใใใใฏใใ ใฃใใในใฆใฎใใผใใใใฏใrelease()ใฎๅผๅบใใงใใผใใใใๅฉ็จๅฏ่ฝใซใชใฃใใใฎใใใซใใใผใใใใฎๅๅพใ่ฉฆใฟใๅฅใฎในใฌใใใซๅฒใๅฝใฆใใใพใใ
ๆๅฎใใใๅพ
ๆฉๆ้ใ็ต้ใใใจใๅคfalseใ่ฟใใใพใใ ๆ้ใใผใญใพใใฏใใใใๅฐใใๅ ดๅใใกใฝใใใฏๅพ
ๆฉใใพใใใ ใใฎในใฌใใใซๅฒใๅฝใฆใใใใฏใใ ใฃใใในใฆใฎใใผใใใใฏใrelease()ใฎๅผๅบใใงใใผใใใใๅฉ็จๅฏ่ฝใซใชใฃใใใฎใใใซใใใผใใใใฎๅๅพใ่ฉฆใฟใๅฅใฎในใฌใใใซๅฒใๅฝใฆใใใพใใ
permits - ๅๅพใใใใผใใใใฎๆฐtimeout - ใใผใใใใฎๆ้ทๅพ
ๆฉๆ้unit - timeoutๅผๆฐใฎๆ้ๅไฝtrueใใในใฆใฎใใผใใใใๅๅพใใใๅใซๅพ
ๆฉๆ้ใ็ต้ใใๅ ดๅใฏfalseInterruptedException - ็พๅจใฎในใฌใใใงๅฒ่พผใฟใ็บ็ใใๅ ดๅIllegalArgumentException - permitsใ่ฒ ใงใใๅ ดๅpublic void release(int permits)
ๆๅฎใใใๆฐใฎใใผใใใใ่งฃๆพใใใจใๅฉ็จๅฏ่ฝใชใใผใใใใฎๆฐใใใฎๅๅขใใพใใ ใใใคใใฎในใฌใใใใใผใใใใๅๅพใใใใจ่ฉฆใฟใฆใใๅ ดๅใใใฎไธญใฎ1ใคใฎในใฌใใใ้ธๆใใใฆใ่งฃๆพใใใใฐใใใฎใใผใใใใไธใใใใพใใ ๅฉ็จๅฏ่ฝใชใใผใใใใฎๆฐใใใฎในใฌใใใฎ่ฆๆฑใๆบใใๅ ดๅใใใฎในใฌใใใฏในใฌใใใฎในใฑใธใฅใผใชใณใฐใซ้ขใใฆ(ใตใใใณ)ๆๅนใซใชใใพใใใใใงใชใๅ ดๅใๅๅใชใใผใใใใๅฉ็จๅฏ่ฝใซใชใใพใงในใฌใใใฏๅพ ๆฉใใพใใ ใใฎในใฌใใใฎ่ฆๆฑใๆบใใใใใจใๅผใ็ถใใใผใใใใๅฉ็จๅฏ่ฝใชๅ ดๅใใใใใฎใใผใใใใฏใใผใใใใๅๅพใใใใจใใฆใใๅฅใฎในใฌใใใซๅฒใๅฝใฆใใใพใใ
ใใผใใใใ่งฃๆพใใในใฌใใใฏใacquireใฎๅผๅบใใงใใฎใใผใใใใๅๅพใใฆใใๅฟ
่ฆใฏใใใพใใใ ใปใใใฉใฎ้ฉๅใชไฝฟ็จๆณใฏใใขใใชใฑใผใทใงใณใงใฎใใญใฐใฉใใณใฐ่ฆ็ดใง็ขบ็ซใใใพใใ
permits - ่งฃๆพใใใใผใใใใฎๆฐIllegalArgumentException - permitsใ่ฒ ใงใใๅ ดๅpublic int availablePermits()
้ๅธธใใใฎใกใฝใใใฏใใใใฐใจใในใใฎๅ ดๅใซไฝฟ็จใใพใใ
public int drainPermits()
protected void reducePermits(int reduction)
acquireใจ็ฐใชใใพใใ reduction - ๅ้คใใใใผใใใใฎๆฐIllegalArgumentException - reductionใ่ฒ ใงใใๅ ดๅpublic boolean isFair()
trueใ่ฟใใพใใtruepublic final boolean hasQueuedThreads()
trueใ่ฟใใใฆใใใปใใฎใใใใใฎในใฌใใใๅๅพใใใจใฏไฟ่จผใใใฆใใชใใใจใซๆณจๆใใฆใใ ใใใ ใใฎใกใฝใใใฏใไธปใซใทในใใ ็ถๆ
ใฎ็ฃ่ฆใซไฝฟ็จใใ็ฎ็ใง่จญ่จใใใฆใใพใใ truepublic final int getQueueLength()
protected Collection<Thread> getQueuedThreads()
public String toString()
"Permits ="ใซ็ถใใฆใใผใใใใฎๆฐใๅซใพใใพใใ ใใฐใพใใฏๆฉ่ฝใ้ไฟก
่ฉณ็ดฐใชAPIใชใใกใฌใณในใใใณ้็บ่
ใใญใฅใกใณใใซใคใใฆใฏใJava SEใฎใใญใฅใกใณใใๅ็
งใใฆใใ ใใใ ใใฎใใญใฅใกใณใใซใฏใๆฆๅฟต็ใชๆฆ่ฆใ็จ่ชใฎๅฎ็พฉใๅ้ฟๆนๆณใๆๅนใชใณใผใไพใชใฉใฎใ้็บ่
ใๅฏพ่ฑกใซใใใใ่ฉณ็ดฐใช่ชฌๆใๅซใพใใฆใใพใใ
Copyright ยฉ 1993, 2025, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Documentation Redistribution Policyใๅ็
งใใฆใใ ใใใ