同步模式之保护性暂停

1.保护性暂停的定义同步模式之保护性暂停_第1张图片
2.实现代码同步模式之保护性暂停_第2张图片
get方法用来获取结果response,如果结果为空则一直等待,直到另一个线程调用complete方法产生结果,并且调用notifyall方法唤醒waitset中的线程,此时response不为空,线程继续工作。
可以在get方法里设置超时等待,即:超过时间不再等待。
3.join的原理
同步模式之保护性暂停_第3张图片
millis即线程需要等待的时间,millis=0时,只要线程存活,就一直等待下去,直到线程结束;millis>0时,设置超时等待,当等待时间不超过millis时,继续等待,超过millis后跳出循环,不再等待。

4.扩展—解耦等待和生产
同步模式之保护性暂停_第4张图片
1.解耦类(邮箱)
图中的Future(即解耦类)是需要维护一个GuardedObject的集合,并且需要将每个GuardedObject的对象区分开,所以需要给GuardedObject对象带ID;
同步模式之保护性暂停_第5张图片
为了保证ID的唯一性使用synchronized,同一时间只有一个线程能为GuardedObject对象生成id,
在这里插入图片描述
收信者调用getGuardedObject以后,需要将信件从邮箱中删除,remove方法能够在返回信息后删除信息。

2.接受结果的线程(收信者)
同步模式之保护性暂停_第6张图片
3.生成结果的线程(送信者)
同步模式之保护性暂停_第7张图片

你可能感兴趣的:(同步模式之保护性暂停)