![Java并发编程:核心方法与框架](https://wfqqreader-1252317822.image.myqcloud.com/cover/235/822235/b_822235.jpg)
上QQ阅读APP看书,第一时间看更新
![](https://epubservercos.yuewen.com/D3D8F4/4410924203007901/epubprivate/OEBPS/Images/icon1.png?sign=1738920434-tKQ7mxpBaA8OAyMtBzpCaIJoaOHscftx-0-a66c23eb51504a080ccf222eebe59cd4)
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所示。
![](https://epubservercos.yuewen.com/D3D8F4/4410924203007901/epubprivate/OEBPS/Images/figure_0029_0002.jpg?sign=1738920434-MChm4xDgAHSNcyFhI5ltksVG6TDZEdzH-0-b52d9bb89cb849168ac8eab5f19cd78e)
图1-19 线程B未获得许可