日期:2014-05-20  浏览次数:20683 次

咨询一问题:httpclient 多线程如何监控页面是否改变呢?
使用httpclient 如何多线程重复读取某个页面,然后判断页面是否发生改变了呢?
Java code

ThreadSafeClientConnManager cm = new ThreadSafeClientConnManager();
        cm.setMaxTotal(100);
        cm.setDefaultMaxPerRoute(5);
        httpclient = new DefaultHttpClient(cm);
        Thread th1 = new Thread(){
            public void run(){
        ExecutorService executor = Executors.newCachedThreadPool();
        for(int i=0;i<10;i++){
            executor.execute(new exe_post());
        }
        
        executor.shutdown();
        while(!executor.isTerminated()){
            
        }
        System.out.println("Thread1 is end");
        }};


exe_post类如下:
Java code

class exe_post implements Runnable{
    public void run(){
        try {
                        HttpPost httpost = new HttpPost("http://www.xxx.com");
                         ......
                         ......
            httpclient.execute(httpost);
                        HttpEntity entity = response.getEntity();
                        判断entity内容
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}



我是初学者,希望大侠、高手给予指导!
以上是我写的代码,错误一大堆啊
我的思路是这样的:
多线程并发去POST同一页面,对返回的结果页面进行分析,
如果结果页面包含某一关键字符,就停止。
否则继续重新读取

这个要怎么写呢?

------解决方案--------------------
重新看了下你的代码,发现逻辑结构有点混乱啊。

建议你的程序分为两个部分:
1、主程序,负责启动工作线程;
2、工作线程,负责执行全过程操作。

工作线程建议采用有穷自动机模型,用一个状态来跟踪整个业务流程,比如:首先是登录,然后是刷票,接下来是XXOO。前一个状态成功了,就开始处理下一个环节。

伪代码模型如下:

HttpClient client = new XXOO;
int status = 0;
public void run() {
while (true) {
switch (status) {
case 0:
if (doLogin()) status = 1;
break;
case 1:
if (doGetList()) status = 2;
。。。
。。。
}
}
}