平成24年秋期試験午後問題 問11

午前試験免除制度対応!基本情報技術者試験のeラーニング【独習ゼミ】

問11 ソフトウェア開発(Java)

次のJavaプログラムの説明及びプログラムを読んで,設問1,2に答えよ。
(Javaプログラムで使用するAPIの説明は,こちらを参照してください。

〔プログラムの説明〕
 スレッドを利用してタイマ処理を行うプログラムである。タイマ処理の基本機能は,秒単位で指定した時間(以下,遅延時間という)が経過したときに,インタフェースで指定したメソッドを呼び出すことである。次のクラス及びインタフェースから成る。
  • クラス Timer は,タイマ処理の機能を定義し実装する。
    1. クラスメソッド createTimer :クラス Timer のインスタンス(以下,タイマという)を生成し,直ちにタイマ処理を開始する。引数で,タイマの名前,インタフェース TimerAction を実装するインスタンス及び運延時間を指定する。
    2. メソッド getName:タイマの名前を返す。
    3. メソッド cancel:タイマ処理をキャンセルする。
    4. メソッド close:タイマ処理が終了するまで待機する。
    5. 内部クラス Worker:タイマ処理を実装し,そのインスタンスは,スレッドとして実行される。実行スレッドは,スレッド名Timer-n(nは0から始まるスレッド生成のシーケンス番号)が与えられ,次の処理を行う。
      1. 現在時刻に,タイマの生成時に指定された遅延時間を加えて,タイマの終了時刻を設定する。
      2. 実行開始時に,タイマの生成時に指定された TimerAction のインスタンスに開始の事象を通知する。
      3. 開始通知後,スレッドは終了時刻になるまで休止する。
      4. 終了時刻になったとき,終了の事象を TimerAction のインスタンスに通知し,タイマ処理の実行を終了する。
      5. タイマ処理がキャンセルされた場合は,終了時刻になるのを待たずにキャンセルの事象を TimerAction のインスタンスに通知し,タイマ処理の実行を終了する。
       ここで,フィールド canceled は,複数スレッドから非同期にアクセスされるので volatile 修飾子を付けて宣言しておく。
  • インタフェース TimerAction は,タイマ処理で事象が発生したときにタイマから事象の通知を受けるメソッドを定義する。タイマを利用するプログラムは,このインタフェースの全メソッドを実装しなければならない。各メソッドの引数は,事象が発生した Timer のインスタンス及び事象発生の時刻である。
    1. メソッド onStart:タイマ処理の開始時に呼び出される。
    2. メソッド onAlarm:タイマ生成時に指定した遅延時間が経過したときに呼び出される。
    3. メソッド onCancel:タイマ処理がキャンセルされたときに呼び出される。
     クラス TimerTest は,タイマ処理のテストプログラムである。メソッド main は,TimerTest のインスタンスを生成し,メソッド test を実行する。test は,二つのタイマを生成し,終了を待つ。メソッド onAlarm が,shortTimer を引数として呼び出された場合,longTimer のタイマ処理をキャンセルする。
     このテストを実行したところ,図1の結果が得られた。プログラムの実行速度は十分に速いものとし,各メソッドの処理時間は秒単位の時刻の測定に影響がないものとする。
pm11_1.gif
pm11_2.gif

設問1

プログラム中の に入れる正しい答えを,解答群の中から選べ。
a に関する解答群
  • (delta = endAt + currentTime()) < 0
  • (delta = endAt + currentTime()) > 0
  • (delta = endAt - currentTime()) < 0
  • (delta = endAt - currentTime()) > 0
b に関する解答群
  • break
  • canceled = false
  • continue
  • delta = 0
  • endAt = 0
  • return
c,d に関する解答群
  • expands
  • extends
  • implements
  • subclasses
  • throw
  • throws
e に関する解答群
  • longTimer
  • new Runnable()
  • new Timer()
  • new TimerAction()
  • shortTimer
  • this
f に関する解答群
  • longTimer.cancel()
  • onCancel(longTimer, instant)
  • onCancel(shortTimer, instant)
  • onCancel(timer, instant)
  • shortTimer.cancel()
  • timer.cancel()
解答選択欄
  • a:
  • b:
  • c:
  • d:
  • e:
  • f:
  • a=
  • b=
  • c=
  • d=
  • e=
  • f=

解説

この設問の解説はまだありません。

設問2

クラス TimerTest に,メソッド log をオーバーロードする次のメソッドを追加した。このメソッドは,タイマの名前の代わりにスレッド名を表示する。
pm11_3.gif
 メソッド onAlarm 及び onCancel で,このオーバーロードしたメソッド log を呼び出すように変更したところ,図2の実行結果が得られた。図2の3行目及び4行目の に入れる文字列の組合せとして正しい答えを,解答群の中から選べ。ここで,メソッド main を実行するスレッドの名前は main とする。また,afには正しい答えが入っているものとする。
pm11_4.gif
解答群
pm11_5.gif
解答選択欄
  •  
  •  

解説

この設問の解説はまだありません。

Pagetop