pafuイーランスクール 学んでできる

メニューへ戻る

Java 応用問題5 平成16年度秋期問12 解説

問題の確認

解説
設問1
a:
aはlong sleepingに設定後に、
Thread.sleepメソッドに指定する、
現在のスレッドの実行を停止する時間になる。
スリープを行う条件としては、
nextCallTimeよりも現在時刻が早い場合に、
nextCallTimeの時間までスリープを行う必要があると考えられるので、
>ウ nextCallTime - System.currentTimeMillis()
が正解。

b:
>waitingList.notifyAll();
を行うブロックに関する指定である。
問のマルチスレッドプログラムで、
waitingListに対して操作を行う場合に
waitingListオブジェクトで排他を行うsynchronizedブロックが
プログラム1の中に2箇所存在し、bに関しても
同様にwaitingList.notifyAll()を行うために
waitingListオブジェクトの排他を行う必要のある部分である。
>エ synchronized (waitingList)
が正解。

c:
waitingList.isEmpty()
->waitingListに空き待ちをしている利用者が登録されていない状態
かつ、CallCenterクラスのmainメソッドを実行している
mainスレッドで、for文を抜けて
>// すべてのオペレータのスレッドを終了させる/P>
>running = false;
まで処理が進んでいない状態であれば、
>waitingList.add(new Call(duration[i]));
>waitingList.notify();
により、空き待ちをしている利用者が登録されるのを
waitingList.wait()によって待つ処理。
(後の回答であるがdで行う処理をセットで考える)
>イ && running
が正解。

d:
InterruptedExceptionの発生する処理であり、notifyではなくwaitである。
waitingListオブジェクトで排他を行っており、
waitを行う対象オブジェクトもwaitingListである。
>エ waitingList.wait()
が正解。

e:
Operatorのスレッドは、waitingListに空き待ちをしている
利用者が登録されている状態で、応答を続ける必要があり、
>ウ while ((call = answer()) != null)
が正解。
>ア if ((call = answer()) != null)
>イ if (answer() != null)
は、一度しか実行されないため誤り。
>エ while (answer() != null)
は、Call callにオブジェクトが設定されないため誤り。

f:
選択肢より、fはelapsedに対して計算を行う処理であり
その結果をprintlnにより表示を行っている。
elapsedはms単位の実時間である。
s単位のシミュレートした時間(実時間の10倍)
s単位にするためには/1000
シミュレートした時間にするためには*10
合わせた結果として/100とする必要があり、更に
>// 経過時間を四捨五入して表示する/P>
のコメントにあるように四捨五入を行う必要があるため、
>ア (elapsed + 50) / 100
が正解。

設問2
パラメータが
・オペレータ数:3
・通話時間(秒):{70, 90, 100, 110}
・呼出しを発生させる間隔(秒):30
の場合の、
>(シミュレータの時間で)80秒後に通話中の状態にあるオペレータの人数
を図を描いて考える。
※(実時間で8秒後)は、考える必要がない部分

0 10 20 30 40 50 60 70 80 90 100
├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼
1 -1-------------------------- -4--...
2 -2--------------------------...
3 -3--------------...

となり、80秒の時点では2番目、3番目の問い合わせにより
オペレータ2、3の2人が通話中の状態となるので、
>ウ 2
が正解。

匿名様 ご投稿

メニューへ戻る

pafuイーランスクール

pafuイーランスクール 学んでできる