Guarded Suspension模式简介
guarded在这里是“保护”的意思;suspension在这里是“暂时挂起”的意思。所以,Guarded Suspension模式又称为“保护性暂挂模式”;
在多线程开发中,常常为了提高应用程序的并发性,会将一个任务分解为多个子任务交给多个线程并行执行,而多个线程之间相互协作时,仍然会存在一个线程需要等待另外的线程完成后继续下一步操作。而Guarded Suspension模式可以帮助我们解决上述的等待问题。
还是用交易系统的“转账”场景来讲述这个模式的实现。在上一篇文章中,我们提到,【账户A】转账给【账户B】,线程01需要持有账户A的锁,同时也需要持有账户B的锁,如果线程01拿不到两个锁,则进行while(!actr.apply(this, target))死循环的方式来循环等待,直到一次全部获取到两个锁后,才进行后面的转账操作。
在并发量不大的情况下,这种方案还是可以接受的ÿ