DesignPattern --- Observer 介绍
code_money_guji
posted @ 2011年2月25日 22:41
in 性能
, 865 阅读
参考资料:
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...
.
2023年12月06日 22:36
The the next occasion I read a blog, Hopefully it doesnt disappoint me around this blog. What i’m saying is, I know it was my substitute for read, but I really thought youd have something interesting to express. All I hear is often a number of whining about something you could fix in the event you werent too busy in search of attention