(1)availablePermits()返回Semaphore对象中当前可用的许可数,此方法通常用于调试,应为许可的数量有可能实时在改变,并不是固定的数量。
(2)drainPermits()可获取并返回立即可用的所有许可数,并将可用许可置位0
(3)方法getQueueLength()的作用是取得等待许可的线程数
(4)方法hasQueuedThreads()的作用是判断有没有线程在等待这个许可
这两个方法通常都是在判断当前有没有等待许可的线程信息时使用。
可以看到线程的个数递减的状态。
公平与非公平信号量的测试:
有些时候,获得许可的顺序与线程启动的顺序有关,这时信号量就要分为公平与非公平的。所谓的公平信号量是获得的锁的顺序与线程启动的顺序有关,但不代表100%地获得信号量,仅仅是在概率上能得到保证,而非公平的信号量就是无关的了。
无序打印:
将isFair=true;
有序打印:
(5)方法tryAcquire的使用
该方法的作用是尝试地获取1个许可,如果获取不到许可返回false,此方法通常与if语句结合使用,其具有无阻塞的特点,无 阻塞的特点可以使用现场不至于在同步处一直持续等待的状态,如果if语句判断不成立则会继续走else语句,程序继续向下走。
网友评论