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

1.1.2 類Semaphore構造方法permits參數作用
參數permits的作用是設置許可的個數,前面已經使用過代碼:
private Semaphore semaphore = new Semaphore(1);
來進行程序的設計,使同一時間內最多只有1個線程可以執(zhí)行acquire()和release()之間的代碼,因為只有1個許可。
其實還可以傳入>1的許可,代表同一時間內,最多允許有x個線程可以執(zhí)行acquire()和release()之間的代碼。
創(chuàng)建實驗用的項目SemaphoreTest2,將SemaphoreTest1項目中的所有源代碼復制到SemaphoreTest2中。
并更改類Service.java代碼如下:
package service; import java.util.concurrent.Semaphore; public class Service { private Semaphore semaphore = new Semaphore(2); public void testMethod() { try { semaphore.acquire(); System.out.println(Thread.currentThread().getName() + " begin timer=" + System.currentTimeMillis()); Thread.sleep(5000); System.out.println(Thread.currentThread().getName() + " end timer=" + System.currentTimeMillis()); semaphore.release(); } catch (InterruptedException e) { e.printStackTrace(); } } }
使用代碼new Semaphore(2)來實例化Semaphore類的含義是同一時間內最多允許2個線程執(zhí)行acquire()和release()之間的代碼。
創(chuàng)建3個線程類如圖1-5所示。

圖1-5 3個線程類代碼
程序運行后的效果如圖1-6所示。
圖1-6中打印的結果說明同一時間只有2個線程可以同時執(zhí)行acquire()和release()之間的代碼。

圖1-6 線程AB共同進入C被排斥
另外需要說明一下,對Semaphore類的構造方法傳遞的參數permits值如果大于1時,該類并不能保證線程安全性,因為還是有可能會出現多個線程共同訪問實例變量,導致出現臟數據的情況。
推薦閱讀
- JavaScript高效圖形編程
- Unity Virtual Reality Projects
- Android Application Development Cookbook(Second Edition)
- Vue.js 3.0源碼解析(微課視頻版)
- 人臉識別原理及算法:動態(tài)人臉識別系統(tǒng)研究
- 單片機應用技術
- 精通Linux(第2版)
- 前端HTML+CSS修煉之道(視頻同步+直播)
- 機器學習與R語言實戰(zhàn)
- C語言程序設計上機指導與習題解答(第2版)
- Java網絡編程實戰(zhàn)
- Spring+Spring MVC+MyBatis從零開始學
- Node.js 12實戰(zhàn)
- Arduino計算機視覺編程
- Python Interviews