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

1.1.11 方法tryAcquire(int permits, long timeout, TimeUnit unit)的使用

有參方法tryAcquire(int permits, long timeout, TimeUnit unit)的作用是在指定的時間內(nèi)嘗試地獲得x個許可,如果獲取不到則返回false。

創(chuàng)建Java項目Semaphore_tryAcquire_4,將項目Semaphore_tryAcquire_3中的源代碼復制到Semaphore_tryAcquire_4中,更改類Service.java代碼如下:


        package service;
        import java.util.concurrent.Semaphore;
        import java.util.concurrent.TimeUnit;
        public class Service {
            private Semaphore semaphore = new Semaphore(3);
            public void testMethod() {
                //1改成3
                try {
                    if (semaphore.tryAcquire(3, 3, TimeUnit.SECONDS)) {
                        System.out.println("ThreadName="
                                  + Thread.currentThread().getName() + "首選進入!");
                        for (int i = 0; i < Integer.MAX_VALUE; i++) {
                              String newString = new String();
                              Math.random();
                        }
                        //方法release對應的permits值也要更改
                        semaphore.release(3);
                    } else{
                        System.out.println("ThreadName="
                                  + Thread.currentThread().getName() + "未成功進入!");
                    }
                } catch(InterruptedExceptione){
                    e.printStackTrace();
                }
            }
        }

程序運行后的效果如圖1-22所示。

圖1-22 線程B未獲得許可

更改Service.java類代碼如下:


        for (int i = 0; i < Integer.MAX_VALUE; i++) {
        }

程序運行結(jié)果如圖1-23所示。

圖1-23 都獲得許可

主站蜘蛛池模板: 永定县| 册亨县| 全椒县| 清苑县| 海口市| 关岭| 尚志市| 福泉市| 黔西| 南郑县| 迭部县| 泽普县| 秀山| 乌兰浩特市| 门源| 曲沃县| 陆河县| 临武县| 广宁县| 乐至县| 防城港市| 荥经县| 隆昌县| 昌邑市| 文安县| 宝鸡市| 邛崃市| 会同县| 南皮县| 怀集县| 河西区| 互助| 登封市| 稷山县| 泽普县| 嘉定区| 德阳市| 宝丰县| 墨脱县| 石景山区| 和龙市|