前阵子写WapExplorer时,设计网络那一部分我采用的是线程编程,采用线程设计也有段时间了,但却总是Copy-plaster,所以一直对它的机制不是很了解,直到那天碰到一个很白痴的问题(明明我启动一个线程去下载网络数据)为什么程序还提示你要采用线程去操作,这样才不会阻塞。具体看下代码
代码有详细解释
经过上面的经验后,发觉,启动一个线程,线程真正工作的地方是run。
在程序初始话方法(构造方法,还是在主程序里执行,要调用start()才算是启动线程)
我好笨啊。看来我离真正的程序员还有一段距离
代码有详细解释
java 代码
- public class WapDownload extends Thread{
- private static Logger logger = Logger.getLogger("WapDownload");
- WmlParser wp;
- String url;
- WapDownload(String url,MainForm mainForm) throws XmlPullParserException, IOException{
- logger.debug("启动一个下载线程");
- this.url = url;
- wp = WmlParser.getWmlParser();
- wp.setMainForm(mainForm);
- //这段代码不能放在这里,因为
- ///setInput();
- start();
- }
- public void run() {
- setInput();
- try {
- wp.parser();
- } catch (XmlPullParserException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- //打开网络资源,其实WmlPaser通过setInput方法进行数据下载,这段代码不能放到初始话里
- //应该放在run方法。这样才能保证真正的线程去读取数据。
- private void setInput() {
- try {
- wp.setInput(HttpProxyHandler.openInputStream(url),"UTF-8");
- } catch (XmlPullParserException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- public static WapDownload openWapDownload(String url, MainForm mainForm) throws XmlPullParserException, IOException{
- return new WapDownload(url, mainForm);
- }
- }
经过上面的经验后,发觉,启动一个线程,线程真正工作的地方是run。
在程序初始话方法(构造方法,还是在主程序里执行,要调用start()才算是启动线程)
我好笨啊。看来我离真正的程序员还有一段距离