并发工具之Semaphore与Exchanger

控制资源并发访问Semaphore

Semaphore可以理解为信号量,用于控制资源能够被并发访问的线程数量,以保证多个线程能够合理的使用特定资源。Semaphore就相当于一个许可证,线程需要先通过acquire方法获取该许可证,该线程才能继续往下执行,否则只能在该方法处阻塞等待。当执行完业务功能后,需要通过release()方法将许可证归还,以便其他线程能够获得许可证继续执行。
Semaphroe可以用于流量控制,特别是在公共资源优先的应用场景,比如数据库连接,假如有多个线程读取数据后,需要将数据保存在数据库中,而可用的最大数据库连接只有10个,这时候就需要使用Semaphroe来控制能够并发访问到数据库连接资源的线程个数最多只有10个。在限制资源使用的应用场景下,Semaphore是非常适合的。
Semaphore里面的一些方法:
在这里插入图片描述
在这里插入图片描述
根据输出结果进行饭呢西,Semaphore允许的最大许可数为5,也就是允许的最大并发执行的线程个数为5,可以看出,前5个线程(前5个学生)先获取到笔,然后填表,而6-10这5个线程,由于获取不到许可只能阻塞等待,当有线程释放许可后,其他线程才可以获取许可并继续往下执行。Semaphore用来做特殊资源的并发访问控制是相当合适的,如果有业务场景需要进行流量控制,可以优先考虑Semaphore。

线程间交换数据的工具Exchanger

Exchanger是一个用于线程间协作的工具类,用于两个线程间交换数据。它提供了一个交换的同步点,在这个同步点两个线程能够交换数据。交换数据是通过exchange方法来实现的,如果一个线程先执行exchange方法,那么它会同步等待另一个线程也执行exchange方法,这个时候两个线程就都达到了同步点,两个线程就可以交换数据。
Exchange除了一个无参的构造方法外,主要方法也很简单:
在这里插入图片描述
例子:
在这里插入图片描述
输出结果
在这里插入图片描述
这个例子很简单,也很能说明Exchanger的基本使用。当两个线程都到达调用excheange方法的同步点的时候,两个线程能交换彼此的数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值