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”函数等待信号。当此函数接收到信号时,其标志被清除,控制从该函数退出。以这种方式使用信号量,不会丢失任何信号。

更新于:2020年9月14日

556 次浏览

启动您的职业生涯

通过完成课程获得认证

开始学习
广告