监听目标对象改变状态
关键词: Observable 和 Observer
package com.player3.java.observer;
import java.util.Observable;
/**
* 观察者类
*/
public class Subject extends Observable
{
private Integer state;
public Subject(int i) {
this.state=i;
}
public Integer getState() {
return state;
}
public void setState(Integer state) {
this.state = state;
//状态改变
this.setChanged();
//推送
this.notifyObservers(state);
//拉取
// this.notifyObservers();
}
}
package com.player3.java.observer;
import java.util.Observable;
import java.util.Observer;
public class ConcreteObserver implements Observer {
public static void main(String[] args) {
Subject subject = new Subject(0);
ConcreteObserver concreteObserver = new ConcreteObserver();
subject.addObserver(concreteObserver);
subject.setState(1);
subject.setState(2);
}
/**
* 更新会调用这个方法
* @param o 更新的对象
* @param arg 更新的字段
*/
public void update(Observable o, Object arg) {
Subject su= (Subject)o;
Integer state1 = su.getState();
Integer state=(Integer)arg;
System.out.println(state);
}
}基于 zookeeper做分布式锁
2.系统b尝试获取锁,被a锁了,b在zookeeper注册监听器,一旦a释放了送,通知b,b尝试重新上锁。