package trainticket;
import java.util.Stack;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;
import org.htmlparser.util.ParserException;public class TrainAction extends DispatchAction implements Runnable{
//火车票查询
public int i;
public int succesnum; //成功数
String result = null;//页面分析后的结果。用字符串表示 public boolean flag = true;
public static Stack<String> s;
public ActionForward searchtrain(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
s = new Stack<String>();
String result = null;
int succesnum = 0;
result= "";
System.out.println("Start:" + System.nanoTime());
for (int i = 0; i < 100; i++)
{
s.add(" http://search.huochepiao.com/chaxun/resultc.asp?txtCheci=" + "G" + i);
}
for (int i = 0; i < 100; i++)
{
s.add(" http://search.huochepiao.com/chaxun/resultc.asp?txtCheci=" + "Z" + i); }
for (int i = 0; i < 100; i++)
{
s.add(" http://search.huochepiao.com/chaxun/resultc.asp?txtCheci=" + "D" + i);
}
for (int i = 0; i < 10; i++)
{
TrainAction t = new TrainAction();
Thread thread = new Thread(t);
thread.start();
}
request.setAttribute("succesnum", succesnum);
request.setAttribute("result", result);
return mapping.findForward("ok");
}
public void run()
{ while (this.flag) //while(this.flag)
{
if (s.size() == 0)
{
this.flag = false;
System.out.println(System.nanoTime());
return;
}
String url = (String) s.pop(); String htmlContent = Trainsearchhttpcilent.doGet(url); //获取抓取页面信息
int looplock = 10;
while(htmlContent.length()<1 && looplock>0)
{
htmlContent = Trainsearchhttpcilent.doGet(url);;
looplock--;
}
if (htmlContent.indexOf("车次信息暂不存在") != -1)
{
System.out.println(url.substring(url.indexOf("=")+1) + "次列车信息不存在");
}
else
{
this.succesnum++;
try {
result =result+TrainHtmlAnalysis.getContent(htmlContent);//获取页面分析后数据
} catch (ParserException e) {
// TODO Auto-generated catch block
result =result+"";
}
System.out.println(url.substring(url.indexOf("=")+1) + "抓取完毕");
}
} }
}
发现里面会先去执行mapping.findForward("ok");再娶执行run方法
我想要的到的两个参数初始值;该怎么去调整啊
从来没用过多线程、、、、
解决方案 »
- 各位大神有java3d实例源码么??,help
- jquery+ajax设置每隔固定时间刷新div网页内容
- 请问大家 我的web项目在windows下面编写 然后在linux跑不起来
- Crystal Report 数字乱码怎么解决,请高手不吝赐教,谢谢
- java高人请看:如何用代码实现解压缩功能(什么语言都可以)救命的!
- Tomcat 的问题!
- jsp上jdbc问题
- 为什么我在TOMCAT下正常运行的程序,在RESIN下无法正常工作,是WEB.XML的问题么?急,在线等!
- ?????请用过struts调用web服务的高手帮忙!!!!!
- [求助]如何在win98里设置系统环境变量?
- !!!!dwr怎么上传图片啊?!!!!
- ibatis的问题~
我想要得到的两个参数一直是初始值;该怎么去调整啊
从来没用过多线程、、、、
{
TrainAction t = new TrainAction();
Thread thread = new Thread(t);
thread.start();
}
request.setAttribute("succesnum", succesnum);
request.setAttribute("result", result);
return mapping.findForward("ok");你这里另外起个线程去跑、代码不会等到你新起的线程执行完后在跑后面的代码的、
所有你塞进去的就总是初始值了、
看下这个吧、应该能解决你的问题。
{
TrainAction t = new TrainAction();
Thread thread = new Thread(t);
thread.start(); //启动线程后,这个循环还是要继续,循环完了,就启动了10个线程,那么主线程还要继续执行下面的红色部分代码,只不过是和你的run中的代码交替执行
}
request.setAttribute("succesnum", succesnum);
request.setAttribute("result", result);
return mapping.findForward("ok");
request.setAttribute("succesnum", succesnum);
request.setAttribute("result", result);
return mapping.findForward("ok");呢