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

1.1.8 方法tryAcquire()的使用

無參方法tryAcquire()的作用是嘗試地獲得1個許可,如果獲取不到則返回false,此方法通常與if語句結合使用,其具有無阻塞的特點。無阻塞的特點可以使線程不至于在同步處一直持續等待的狀態,如果if語句判斷不成立則線程會繼續走else語句,程序會繼續向下運行。

創建Java項目Semaphore_tryAcquire_1,類代碼如下:


        package service;
        import java.util.concurrent.Semaphore;
        public class Service {
        private Semaphore semaphore = new Semaphore(1);
        public void testMethod() {
            if (semaphore.tryAcquire()) {
                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()
                        + "未成功進入!");
            }
        }
    }

兩個線程類如圖1-17所示。

圖1-17 線程類代碼

運行類Run.java代碼如下:


    package test.run;
    import service.Service;
    import extthread.ThreadA;
    import extthread.ThreadB;
    public class Run {
        public static void main(String[] args) {
            Service service = new Service();
            ThreadA a = new ThreadA(service);
            a.setName("A");
            a.start();
            ThreadB b = new ThreadB(service);
            b.setName("B");
                  b.start();
              }
          }

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

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

主站蜘蛛池模板: 中阳县| 冀州市| 汝南县| 台北县| 兴文县| 延安市| 伊吾县| 柳江县| 乐至县| 昭平县| 云安县| 连云港市| 南华县| 金阳县| 灵武市| 清新县| 富阳市| 东丽区| 深水埗区| 武乡县| 新安县| 吉木萨尔县| 潜山县| 门源| 安丘市| 中卫市| 鞍山市| 澳门| 信阳市| 嘉禾县| 巴中市| 青阳县| 丹棱县| 荣成市| 故城县| 屯昌县| 木里| 旺苍县| 蒙山县| 柳林县| 云霄县|