- ベストアンサー
HTMLをマルチスレッド通信で取得する方法
- HTMLをマルチスレッドで通信して取得する方法についてのソースコードです。
- run()メソッド内では、String[]配列に記述された複数のサイトに同時にアクセスし、HTMLを取得しています。
- この方法を使うことで、複数のサイトから効率的にHTMLを取得することができます。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
(wormhole さんの回答を読んで) ……うわっ俺恥ずかしい見逃ししちゃったよorz まったくもってその通りでした。 あと、前回のコードで書き忘れていたことが一つありました。 ExThread クラスの run() メソッドに Override アノテーションを付け忘れていました。 http://www.techscore.com/tech/Java/JavaSE/JavaLanguage/7/ これは付けなくてもコンパイルでき実行できるのですが、親クラス等のメソッドをオーバーラードするときは付けておくべきというのが最近のコーディングスタイルとなっております。 なぜならば、メソッド名を間違えた、引数の数や型を間違えた等のうっかりオーバーライドするメソッドとは別のメソッドになってしまったというミスを防ぐことができ、また、のちにコードを読むときにこれはオーバーライドされたメソッドであることが一目でわかるようになるからです。
その他の回答 (2)
- wormhole
- ベストアンサー率28% (1626/5665)
Threadを継承しないといけないのは#1の方が書かれているとおりですが >ex.run(); だと、同一スレッド内でrun()メソッドを呼び出してるだけです。 スレッドを開始するなら ex.start(); http://docs.oracle.com/javase/jp/6/api/java/lang/Thread.html
補足
ご回答くださいましてありがとうございます。 おかげさまで無事、実行することができました。
- hitomura
- ベストアンサー率48% (325/664)
このコードではだめです。 1. ExThread クラスが Thread クラスを継承していません。 2. 上記の問題を解消しても、この run() のままでは単に別スレッドで「String[] 配列に記述した 3 つのサイトに『順番に』アクセスして HTML を取得する」という処理をやっているにすぎません。 あなたのやりたいことをやるなら、以下のようになるでしょう。 ……でもこれ画面表示が大変なことになりそうな気もするけど、まとめて表示するから大丈夫なのかなぁ。 package multiThreadTest; public class test { public static void main(String[] args) { String[] listUrls = {"http://www.yahoo.co.jp", "http://www.google.co.jp", "http://httpd.apache.org"}; for(String url : listUrls) { ExThread ex = new ExThread(url); ex.run(); } } } public class ExThread exteds Thread { private String url; ExThread(String url) { this.url = url; } public void run() { String strHtml = Getter.getHtml(url); //HTMLを取得する処理 System.out.println(strHtml); } }
補足
ご回答くださいましてありがとうございます。 おかげさまで無事、実行することができました。