DesignPattern --- Observer 介绍
参考资料:
http://en.wikipedia.org/wiki/Observer_pattern --from wiki
多线程的Observer
多线程中,有些时候在线程之间的沟通上可以使用Observer Pattern来实现, JDK Util包中提供了相关的一些模式类可以使得其实现比较简单,下面介绍基于JDK Observable 和 Observer ,如下:
在Observable中有一个线程安全的Vector来作为Observer的一个存储容器. 当调用Observable的notify()或者notify(obj)方法时, 内部操作会遍历这个vector并强制转化每一个vector成员为Observer并调用其update(this,obj)方法.这样就做到了事件的传达.
下面是wiki中的应用实例:
public class EventSource extends Observable implements Runnable {
public void run() {
try {
final InputStreamReader isr = new InputStreamReader( System.in );
final BufferedReader br = new BufferedReader( isr );
while( true ) {
String response = br.readLine();
setChanged();//一定要先调用这个方法, 在执行notifyObservers()的时候是要检测这个boolean的标志位的: if (!changed) return
notifyObservers( response );
}
}
catch (IOException e) {
e.printStackTrace();
}
}
}
-------------------------
public class ResponseHandler implements Observer {
private String resp;
public void update (Observable obj, Object arg) {
if (arg instanceof String) {
resp = (String) arg;
System.out.println("\nReceived Response: "+ resp );
}
}
}
------------------------
在很多时候, 一个服务器通常都是:当一个客户端连接并发送请求的时候, 服务器接受到请求触发一个new thread(new Worker(request)).start()的操作.当并发数量达到一定的数量,这样的per-request-per-thread的模式很容易达到cpu的瓶颈. 这个时候可以参考mina的做法.
to be continue...
.