原创转载请注明出处:http://agilestyle.iteye.com/blog/2343040
availablePermits()返回此Semaphore对象中当前可用的permits个数
drainPermits()获取并返回立即可用的所有permits个数,并将可用permits置为0

AvailablePermitsTest.java
package org.fool.java.concurrent.semaphore.availabledrainpermits;
import java.util.concurrent.Semaphore;
public class AvailablePermitsTest {
public static void main(String[] args) {
MyService service = new MyService();
service.testMethod();
}
public static class MyService {
private Semaphore semaphore = new Semaphore(10);
public void testMethod() {
try {
semaphore.acquire();
System.out.println(semaphore.availablePermits()); // outputs 9
System.out.println(semaphore.availablePermits()); // outputs 9
System.out.println(semaphore.availablePermits()); // outputs 9
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
semaphore.release();
}
}
}
}
Run

DrainPermitsTest.java
package org.fool.java.concurrent.semaphore.availabledrainpermits;
import java.util.concurrent.Semaphore;
public class DrainPermitsTest {
public static void main(String[] args) {
MyService service = new MyService();
service.testMethod();
}
public static class MyService {
private Semaphore semaphore = new Semaphore(10);
public void testMethod() {
try {
semaphore.acquire();
System.out.println(semaphore.availablePermits());
System.out.println(semaphore.drainPermits() + " " + semaphore.availablePermits());
System.out.println(semaphore.drainPermits() + " " + semaphore.availablePermits());
System.out.println(semaphore.drainPermits() + " " + semaphore.availablePermits());
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
semaphore.release();
}
}
}
}
Run

本文通过两个示例程序详细解释了Java并发包中Semaphore类的availablePermits()与drainPermits()方法的功能。availablePermits()返回当前可用的许可证数量;drainPermits()则获取并返回所有立即可用的许可证,并将剩余可用的许可证数量置零。
1236

被折叠的 条评论
为什么被折叠?



