- Java并發編程:核心方法與框架
- 高洪巖
- 291字
- 2019-01-03 02:34:14

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未獲得許可