Java言語入門 〜C言語を学んだ君へ〜
第3問解答
FileIOクラス
Ex18_03クラス
第3問解説
主に、ファイル入出力とマルチスレッドの理解度を確認する問題です。
内容はそれほど難しくありません。
また、この問題では、プログラムの作成方法に「マルチスレッドによる入出力を行うこと」以外の条件は指定していません。
つまり、条件を満たし、実行結果が正しく出力できれば、正解となります。
そのため、今回の答えはあくまで「一例」と考えてください。
では、次にプログラムの解説をします。
FileIOクラスの解説
まずは、FileIOクラスです。
このクラスは指定した入力ストリームから出力ストリームへ、1行ずつ書き込みを行います。
以下に詳しく解説します。
1行目
入出力クラスを使うため、インポートを行います。
3行目
Threadクラスを継承します。
これにより、スレッドによる処理が行えます。
4行目
このクラスで一つのみ存在するオブジェクトを作成します。
後で解説しますが、このオブジェクトを使って、「排他制御」を行います。
8〜11行目
コンストラクタです。
入出力ストリームを受け取り、メンバ変数を初期化します。
13行目
runメソッドの開始です。
このメソッドより、スレッドが開始されるため、ここに入出力の処理を記述していきます。
14行目
入出力を行うには、例外処理が必要になります。
そのため、try〜catchで例外を受け取ります。
15〜21行目
入力と出力を繰り返し行います。
ただし、ここで「synchronized」を使います。
これは、排他制御をおこなうためのキーワードで、読み書きを同時に行うことを禁止しています。
そして、この排他制御を実現するためにオブジェクトobjを使います。
これは、このクラスに1つしか存在しないため、このクラスをいくつ作成しても、排他制御が行われます。
Ex18_03クラスの解説
続いて、Ex18_03クラスです。
このクラスはFileIOを使って、2つのファイルから1行ずつ読み込み1つのファイルに書き込みを行います。
以下に詳しく解説します。
1行目
ファイル入出力クラスを使うため、インポートします。
6〜8行目
入出力ストリームを作成します。
入力ファイルは2つ作成し、出力ファイルは1つのみです。
10〜11行目
クラスFileIOを作成します。
12〜13行目
読み書きを開始します。
startメソッドより、スレッドが開始します。
15〜16行目
二つのスレッドが終了するまで待ちます。
18〜20行目
入出力ストリームを閉じます。