- Java并發(fā)編程:核心方法與框架
- 高洪巖
- 242字
- 2019-01-03 02:34:15

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 都獲得許可
推薦閱讀
- Web程序設計及應用
- Kubernetes實戰(zhàn)
- Android項目開發(fā)入門教程
- JavaScript by Example
- Python:Master the Art of Design Patterns
- Linux:Embedded Development
- Swift Playgrounds少兒趣編程
- Practical Game Design with Unity and Playmaker
- 工業(yè)機器人離線編程
- Machine Learning for Developers
- Python數(shù)據(jù)可視化之美:專業(yè)圖表繪制指南(全彩)
- Mastering XenApp?
- Python趣味創(chuàng)意編程
- 可視化H5頁面設計與制作:Mugeda標準教程
- 循序漸進Vue.js 3前端開發(fā)實戰(zhàn)