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