1.1.9 方法tryAcquire(int permits)的使用

有参方法tryAcquire(int permits)的作用是尝试地获得x个许可,如果获取不到则返回false。下面的项目就验证这个结论。

创建Java项目Semaphore_tryAcquire_2,将项目Semaphore_tryAcquire_1中的源代码复制到Semaphore_tryAcquire_2中,更改类代码如下:


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

程序运行后的效果如图1-19所示。

图1-19 线程B未获得许可