官术网_书友最值得收藏!

1.1.5 方法availablePermits()和drainPermits()

availablePermits()返回此Semaphore對(duì)象中當(dāng)前可用的許可數(shù),此方法通常用于調(diào)試,因?yàn)樵S可的數(shù)量有可能實(shí)時(shí)在改變,并不是固定的數(shù)量。

drainPermits()可獲取并返回立即可用的所有許可個(gè)數(shù),并且將可用許可置0。

創(chuàng)建測(cè)試用的項(xiàng)目availablePermitsTest,類MyService.java代碼如下:


        package myservice;
        import java.util.concurrent.Semaphore;
        public class MyService {
            private Semaphore semaphore = new Semaphore(10);
            public void testMethod() {
                try {
                        semaphore.acquire();
                        System.out.println(semaphore.availablePermits());
                        System.out.println(semaphore.availablePermits());
                        System.out.println(semaphore.availablePermits());
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    } finally {
                        semaphore.release();
                    }
                }
            }

類Run.java代碼如下:


        package test.run;
        import myservice.MyService;
        public class Run {
            public static void main(String[] args) {
                MyService service = new MyService();
                service.testMethod();
            }
        }

程序運(yùn)行結(jié)果如圖1-12所示。

圖1-12 有效的許可數(shù)量

創(chuàng)建測(cè)試用的項(xiàng)目drainPermitsTest,將項(xiàng)目availablePermitsTest中的所有源代碼復(fù)制到drainPermitsTest項(xiàng)目中,更改類MyService.java代碼如下:


        package myservice;
        import java.util.concurrent.Semaphore;
        public 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();
    }
}
}

程序運(yùn)行后的效果如圖1-13所示。

圖1-13 許可被置0

執(zhí)行方法drainPermits()返回可用的許可個(gè)數(shù),并將可用許可數(shù)清零。

主站蜘蛛池模板: 高州市| 无为县| 绥德县| 乌恰县| 郴州市| 綦江县| 贵定县| 隆尧县| 本溪市| 荥阳市| 武宣县| 乐安县| 平陆县| 贡觉县| 莱西市| 安国市| 竹北市| 广宗县| 阳西县| 左贡县| 财经| 南开区| 永川市| 张家川| 东城区| 德化县| 库尔勒市| 馆陶县| 衢州市| 杨浦区| 上高县| 通州市| 武乡县| 焦作市| 丽江市| 英超| 枣庄市| 武义县| 台江县| 外汇| 确山县|