code_money_guji's Blog

Happy coding

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...
.