當光靠synchronized已經沒有辦法保護shared resource的時候,通常表示存取shared resource的時候需要條件,這時候就要設計Guarded Suspension Pattern。
最常見的例子是client端以及server端的溝通,client端會不斷地送request給server,而server會不停地去收request,假設我們用queue去儲存request,那麼server就不能在queue為empty的時候去接收request,這個就是存取的條件---queue不能是empty。
Request.java
public class Request {
private final String name;
public Request(String name) {
this.name = name;
}
public String getName() {
return name;
}
public String toString() {
return "[ Request " + name + " ]";
}
}
RequestQueue.java,採用LinkedList來存放Request
import java.util.LinkedList;
public ...