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

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 雙雙獲得許可
推薦閱讀
- C程序設計簡明教程(第二版)
- Oracle 11g從入門到精通(第2版) (軟件開發(fā)視頻大講堂)
- 軟件架構設計:大型網(wǎng)站技術架構與業(yè)務架構融合之道
- Getting Started with PowerShell
- SQL語言從入門到精通
- Java Web應用開發(fā)技術與案例教程(第2版)
- JavaScript+Vue+React全程實例
- RabbitMQ Essentials
- Windows Phone 7.5:Building Location-aware Applications
- Linux Shell核心編程指南
- 一塊面包板玩轉Arduino編程
- 區(qū)塊鏈技術進階與實戰(zhàn)(第2版)
- IoT Projects with Bluetooth Low Energy
- QPanda量子計算編程
- 監(jiān)控的藝術:云原生時代的監(jiān)控框架