Java中的訊號量
訊號量用於在執行程序時控制對共享資源的訪問。這是藉助計數器實現的。當此計數器值大於0時,允許訪問共享資源。另一方面,如果計數器值為零,則拒絕訪問共享資源。計數器基本上記錄它已授予共享資源的許可權數量。這意味著訊號量為執行緒提供對共享資源的訪問。
- 訊號量位於java.util.concurrent包中。訊號量的概念是隱式實現的。
- 如果訊號量的計數大於0,則執行緒可以訪問共享資源。訊號量的計數將同時遞減。否則,如果訊號量的計數不為0,則執行緒將被阻止訪問共享資源,直到訊號量釋放其他執行緒的訪問許可權。當執行緒不需要共享資源時,它會放棄其許可權。此時,訊號量的計數將遞增。如果另一個執行緒也需要訪問共享資源,它可以競爭訪問共享資源。
示例
以下是一個示例:
public class Demo {
private boolean my_signal = false;
public synchronized void accept() {
this.my_signal = true;
this.notify();
}
public synchronized void give_it() throws InterruptedException {
while(!this.my_signal) wait();
this.my_signal = false;
}
}“accept”方法用於傳送儲存在訊號量中的訊號。“give_it”函式等待訊號。當此函式接收到訊號時,其標誌被清除,控制從該函式退出。以這種方式使用訊號量,不會丟失任何訊號。
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP