意图
客户端调用对象某个方法,该方法能否执行由该对象当时的状态来决定,客户端本身并不关心方法是否执行成功。 这类方法可以认为是薛定谔的方法(因此不确定一次调用是是否执行了)
解决问题
在多线程环境下,有些对象方法并不是每一次都要执行的(其执行依赖于对象当时的状态),而对于客户端线程,可能每一次都会调用到这类方法,因此,我们可能需要在实现中判断当时状态是否需要执行,如果不需要,则直接返回,或者发出某类通知(如抛出异常)。客户端线程不会应为状态的不满足而等待。
类图结构
代码样例
public class Worker {
private volatile WorkingState state;
public void work() {
if (state == WorkingState.WORKING){
System.out.println("already working");
return;
}
doWork();
state = WorkingState.IDLE;
}
private void doWork() {
}
enum WorkingState {
WORKING,
IDLE
}
}
public class Client {
public static void main(String[] args) {
Worker worker = new Worker();
worker.work();
}
}