Guarded Suspension 模式
Guarded Suspension 模式通过让线程等待来保证示例的安全性。
示例程序
类的一览表
名字 | 说明 |
---|---|
Request | 表示一个请求的类 |
RequestQueue | 依次存放请求的类 |
ClientThread | 发送请求的类 |
ServerThread | 接收请求的类 |
Main | 测试程序行为的类 |
示例程序的时序图
Request类
1 | public class Request { |
RequestQueue类
RequestQueue类用于依次存放请求。该类中定义了getRequest和putRequest两个方法。
getRequest方法
getRequest方法会去除最先存放在RequestQueue中的一个请求,作为其返回值。如果一个请求都没有,那就一直等待,知道其他某个线程执行putRequest。
putRequest方法
putR方法用于添加一个请求。当线程想要向RequestQueue添加Request实例,可调用该方法。
1 | public class RequestQueue { |
ClientThread类
ClientThread类用于表示发送请求的线程。ClientThread持有RequestQueue的实例,并连续调用该实例的putRequest,放入请求。请求的名称依次为“No.0”、“No.1”……
为了错开发送请求的时间点,这里使用Random类随机生成了0-1000之间的数,来作为sleep的时间。
1 | public class ClientThread extends Thread { |
ServerThread类
ServerThread用于表示接受请求的线程。
1 | public class ServerThread extends Thread { |
Main类
1 | public class Main { |