并发编程设计模式——Balking模式(三十九)

Balking 模式

多线程下,维护一个共享状态满足某个条件时,执行业务逻辑;当不满足时则立即放弃。通常用互斥锁来确保共享状态线程安全,如果不需要保证共享状态原子性,也可以用 volitle 修饰,替换互斥锁。

Balking 模式的经典实现        

Balking 模式本质上是一种规范化地解决“多线程版本的 if”的方案,其实就是对if判断的加锁设计。并抽象一个方法出来。

 

这样的好处是将并发处理逻辑和业务逻辑分开。

用 volatile 实现 Balking 模式

使用 volatile 的前提是对原子性没有要求。

总结

  1. Balking 模式和 Guarded Suspension 模式从实现上看似乎没有多大的关系,Balking 模式只需要用互斥锁就能解决,而 Guarded Suspension 模式则要用到管程这种高级的并发原语;但是从应用的角度来看,它们解决的都是“线程安全的 if”语义,不同之处在于,Guarded Suspension 模式会等待 if 条件为真,而 Balking 模式不会等待。
  2. Balking 模式的经典实现是使用互斥锁,你可以使用 Java 语言内置 synchronized,也可以使用 SDK 提供 Lock;如果你对互斥锁的性能不满意,可以尝试采用 volatile 方案,不过使用 volatile 方案需要你更加谨慎。
  3. 当然你也可以尝试使用双重检查方案来优化性能,双重检查中的第一次检查,完全是出于对性能的考量:避免执行加锁操作,因为加锁操作很耗时。而加锁之后的二次检查,则是出于对安全性负责。双重检查方案在优化加锁性能方面经常会用到。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值