前言
Guarded Suspension是指当现在并不适合马上执行某个操作时,就要求想要执行该操作的线程等待
Guarded Suspension
首先模拟一个案例
首先是表示请求的类
一次存放请求以待使用的类
送出请求的类
接收请求的类
最后是测试
测试结果
A Request:[ RequestNo .0]
B Handlet:[ RequestNo .0]
A Request:[ RequestNo .1]
B Handlet:[ RequestNo .1]
A Request:[ RequestNo .2]
B Handlet:[ RequestNo .2]
……
从测试结果可以看出,当发送请求时,接受并处理
而其中的关键方法是getRequest()中,当满足while里条件时,则调用wait,处于等待,直到收到通知,才从休息区出来,而这种一定要满足的条件,就称为Guarded Suspension的警戒条件
所以可将该模式抽象为如下
GuardedObject(被防伪的对象)参与者:当线程执行guardMethod时,只要满足警戒条件,就马上执行,当不成立时,就开始等待,而条件的成立与否,是与参与者的状态变化有关
guardMethod:防伪的方法
stateChangingMethod:状态改变的方法