クラスライブラリ応用

演習問題

解答は

に提出しなさい。クラスファイル (?.class) は提出不要。 提出は gFTP 等の ftp ソフトを用いて行うこと。

問題1

マルチスレッド化することにより処理速度の大きな向上が期待できる処理の例を3つ挙げなさい。 処理の実用性は問わない。

例えば、Webサーバからのページの取得は、ページごとに独立に取得することができるので有効であるが、ハードディスクからの読み込みはドライブが同じ場合ヘッドが増えるわけではないのであまり意味がない。キーボード入力はそれ自体は並列にできないが、入力待ちのときに裏でする仕事があるなら意味がある。

なお、3つそれぞれについて、スレッド間で同期を取る必要があるかを考察し、記述すること。

ファイル名は Multithreading.txt とする。

問題2

複数のWebページを同時に取得し、その内容を表示するプログラムを作成しなさい。 異なるスレッドで取得していることがわかるような表示にすること (取得しているページのURLを表示する、スレッドに通し番号を付けてそれを表示する、など)。

main メソッドのあるクラスのクラス名は WebpageFetcher とする。

問題3

複数のWebページからリンク先のURLを取り出し、 その一覧を表示するプログラムを作成しなさい。 URL は、URL クラスの機能を使って絶対リンクとして扱うこと。

main メソッドでスレッドの数だけリストを用意し、それを各スレッドに渡しなさい。 各スレッドでは、そのリストにリンク先のURLを格納すること。

main メソッドのあるクラスのクラス名は URLExtractor とする。

スレッドごとのリストではなく、共通のリストにするにはどうしたらよいか、 考察しなさい (考察結果は提出しなくてよい)。

問題4 (Advanced)

問題1 の3つの例の中に実装可能なものがあれば、1つ実装してみなさい。

main メソッドのあるクラスのクラス名は MyMultiThreadProgram とする。 MyMultiThreadProgram.java の先頭にプログラムの概要をコメントとして記述すること。