Java信号量的解析全在这里了

本文详细介绍了Java中Semaphore的使用,从简单的实现到可计数、有上限的信号量,再到将其作为锁来保护关键区域的应用。通过Semaphore,可以控制并发线程的数量,避免资源竞争,确保程序的正确性。在最后还强调了release方法在finally块中执行的重要性,以确保异常情况下信号的正确释放。
摘要由CSDN通过智能技术生成

Semaphore(信号量) 是一个线程同步结构,用于在线程间传递信号,以避免出现信号丢失(译者注:下文会具体介绍),或者像锁一样用于保护一个关键区域。自从5.0开始,jdk在java.util.concurrent包里提供了Semaphore 的官方实现,因此大家不需要自己去实现Semaphore。但是还是很有必要去熟悉如何使用Semaphore及其背后的原理

内容主题:

一、简单的Semaphore实现

下面是一个信号量的简单实现:

public class Semaphore {
private boolean signal = false;
public synchronized void take() {
this.signal = true;
this.notify();1011}
public synchronized void release() throws InterruptedException{
while(!this.signal) wait();
this.signal = false;
}
}

Take方法发出一个被存放在Semaphore内部的信号,而Release方法则等待一个信号,当其接收到信号后,标记位signal被清空,然后该方法终止。

使用这个semaphore可以避免错失某些信号通知。用take方法来代替notify,release方法来代替wait。如果某线程在调用release等待之前调用take方法,那么调用release方法的线程仍然知道take方法已经被某个线程调用过了,因为该Semaphore内部保存了take方法发出的信号。而wait和notify方法就没有这样的功能。

当用semapho

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值