原创转载请注明出处: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