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

1.1.13 多進路-單處理-多出路實驗
本實現的目標是允許多個線程同時處理任務,但執行任務的順序卻是同步的,也就是阻塞的,所以也稱單處理。
創建實驗用的項目Semaphore_MoreToOne_2,將Semaphore_MoreToOne_1項目中的所有源代碼復制到項目Semaphore_MoreToOne_2中,更改類Service.java代碼如下:
package service; import java.util.concurrent.Semaphore; import java.util.concurrent.locks.ReentrantLock; public class Service { private Semaphore semaphore = new Semaphore(3); private ReentrantLock lock = new ReentrantLock(); public void sayHello() { try { semaphore.acquire(); System.out.println("ThreadName=" + Thread.currentThread().getName() + "準備"); lock.lock(); System.out.println("begin hello " + System.currentTimeMillis()); for (int i = 0; i < 5; i++) { System.out.println(Thread.currentThread().getName() + "打印" + (i + 1)); } System.out.println(" end hello " + System.currentTimeMillis()); lock.unlock(); semaphore.release(); System.out.println("ThreadName=" + Thread.currentThread().getName() + "結束"); } catch (InterruptedException e) { e.printStackTrace(); } } }
在代碼中加入了ReentrantLock對象,保證了同步性。
程序運行結果如圖1-25所示。

圖1-25 打印循環中的內容為有序
在單處理步驟中實現了同步,所以打印的效果呈1,2,3,4,5這樣的順序。
推薦閱讀
- Python快樂編程:人工智能深度學習基礎
- Python Geospatial Development(Second Edition)
- 匯編語言程序設計(第3版)
- PhoneGap:Beginner's Guide(Third Edition)
- Python編程從0到1(視頻教學版)
- Integrating Facebook iOS SDK with Your Application
- C和C++游戲趣味編程
- Java網絡編程實戰
- 深入理解C指針
- C++ Fundamentals
- Extending Unity with Editor Scripting
- AutoCAD基礎教程
- 你必須知道的.NET(第2版)
- Flink原理深入與編程實戰:Scala+Java(微課視頻版)
- 邊做邊學深度強化學習:PyTorch程序設計實踐