原创转载请注明出处:http://agilestyle.iteye.com/blog/2343056
getQueueLength()作用是取得等待permits的线程个数
hasQueuedThreads()作用是判断有没有线程在等待permits
这两个方法通常都是在判断当前有没有等待permits的线程信息时使用
Service.java
package org.fool.java.concurrent.semaphore.queue;
import java.util.concurrent.Semaphore;
public class Service {
private Semaphore semaphore = new Semaphore(1);
public void testMethod() {
try {
semaphore.acquire();
Thread.sleep(1000);
System.out.println("Returns an estimate of the number of threads waiting to acquire " + semaphore.getQueueLength());
System.out.println("Whether any threads are waiting to acquire? " + semaphore.hasQueuedThreads());
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
semaphore.release();
}
}
}
ThreadA.java
package org.fool.java.concurrent.semaphore.queue;
public class ThreadA implements Runnable {
private Service service;
public ThreadA(Service service) {
this.service = service;
}
@Override
public void run() {
service.testMethod();
}
}
QueueTest.java
package org.fool.java.concurrent.semaphore.queue;
public class QueueTest {
public static void main(String[] args) {
Service service = new Service();
Thread a = new Thread(new ThreadA(service));
a.start();
for (int i = 0; i < 5; i++) {
new Thread(new ThreadA(service)).start();
}
}
}
Run