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

1.1.10 方法tryAcquire(long timeout, TimeUnit unit)的使用

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

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


        package service;
        import java.util.concurrent.Semaphore;
        import java.util.concurrent.TimeUnit;
        public class Service {
            private Semaphore semaphore = new Semaphore(1);
            public void testMethod() {
                try {
                    if (semaphore.tryAcquire(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();
                        }
                        semaphore.release();
                    } else{
                        System.out.println("ThreadName="
                                  + Thread.currentThread().getName() + "未成功進入!");
                    }
                    //方法release對應的permits值也要更改
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }

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

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

更改Service.java類代碼如下:


                        for (int i = 0; i < Integer.MAX_VALUE; i++) {
                            //String newString = new String();
                            //Math.random();
                        }

程序運行結果如圖1-21所示。

圖1-21 雙雙獲得許可

主站蜘蛛池模板: 汕尾市| 虹口区| 诸城市| 甘泉县| 长白| 天镇县| 乌拉特前旗| 龙川县| 枣阳市| 长乐市| 建平县| 东乌珠穆沁旗| 双牌县| 芦溪县| 罗山县| 清流县| 巴林右旗| 军事| 安宁市| 兴化市| 叶城县| 郯城县| 连南| 赤壁市| 望奎县| 昭觉县| 肥西县| 澄城县| 临邑县| 合江县| 剑川县| 安陆市| 大厂| 五指山市| 班玛县| 定远县| 资源县| 平山县| 井冈山市| 巴林左旗| 铜陵市|