あなたの「必」の書き順を教えてください

HTMLをマルチスレッドで通信して取得するソースを書いてみたのですが
動くことは動くのですが本当に以下ソースでできているのでしょうか。
やりたいこととしてはString[]配列に記述した3つのサイトに同時にアクセスしてHTMLを
取得するという処理を行いたいです。
run()メソッドの中身にマルチスレッドでやりたい処理を書けば上記の望みは叶えられるもの
なのでしょうか。

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"};

ExThread ex = new ExThread(listUrls);
ex.run();
}
}



public class ExThread {

private String[] listUrls;

ExThread(String[] listUrls) {
this.listUrls = listUrls;
}

public void run() {
for(String strUrl : listUrls) {
String strHtml = Getter.getHtml(strUrl); //HTMLを取得する処理
System.out.println(strHtml);
}
}
}

A 回答 (3件)

(wormhole さんの回答を読んで)


……うわっ俺恥ずかしい見逃ししちゃったよorz
まったくもってその通りでした。

あと、前回のコードで書き忘れていたことが一つありました。
ExThread クラスの run() メソッドに Override アノテーションを付け忘れていました。
http://www.techscore.com/tech/Java/JavaSE/JavaLa …

これは付けなくてもコンパイルでき実行できるのですが、親クラス等のメソッドをオーバーラードするときは付けておくべきというのが最近のコーディングスタイルとなっております。
なぜならば、メソッド名を間違えた、引数の数や型を間違えた等のうっかりオーバーライドするメソッドとは別のメソッドになってしまったというミスを防ぐことができ、また、のちにコードを読むときにこれはオーバーライドされたメソッドであることが一目でわかるようになるからです。

この回答への補足

ご回答くださいましてありがとうございます。
おかげさまで無事、実行することができました。

補足日時:2013/12/17 00:48
    • good
    • 0

Threadを継承しないといけないのは#1の方が書かれているとおりですが



>ex.run();

だと、同一スレッド内でrun()メソッドを呼び出してるだけです。
スレッドを開始するなら

ex.start();

http://docs.oracle.com/javase/jp/6/api/java/lang …

この回答への補足

ご回答くださいましてありがとうございます。
おかげさまで無事、実行することができました。

補足日時:2013/12/17 00:48
    • good
    • 0

このコードではだめです。



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);
}
}
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報