こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

キューについて

インターネットの記事でjava.util.Queueの使い方に関する記事を読んでいてふと思ったのですが
このQueueというものを使用する場面が想像できなかったので質問させてください。
キューを使用することで先入れ先出しで処理されると思うのですがそもそもプログラムってそういう
ものなんじゃないの?(早い者勝ちで処理される)と思ってしまいました。
例えばAさんとBさんが同じ処理を行うボタンを押したとして、Aさんのリクエストが早ければAさんの
処理、Bさんのリクエストが早ければBさんの処理が先に行われる。
そう考えるとキューというクラス(インターフェース)自体必要なの?
って思って使い道が想像がつかなかったのですがどうなのでしょうか。
※例のような動きを実現させるために必要なのであろうとは思うのですが業務アプリを作る上では
必要性について想像がつかなかったのですが使用する場面はあるのでしょうか。

投稿日時 - 2014-06-09 00:41:30

QNo.8629600

すぐに回答ほしいです

質問者が選んだベストアンサー

すこし勘違いされていると思います。

>例えばAさんとBさんが同じ処理を行うボタンを押したとして、Aさんのリクエストが早ければAさんの
>処理、Bさんのリクエストが早ければBさんの処理が先に行われる。

この『順番に処理される』というのは、内部でキューを使用しているからです。


キューやスタックは、処理を順番に行うという目的もありますが、「他の処理が終わるのを待つ」という目的もあります。

AさんとBさんが同時にボタンを押した場合、キューを使わなければ、「早い者勝ちで処理される」という部分は同じですが、
遅い人は処理を中止します。(順番に、とか、他の人が終わってから処理する、というようなことはありません。何も出来なくなります。)

投稿日時 - 2014-06-09 03:28:57

補足

>>遅い人は処理を中止します。(順番に、とか、他の人が終わってから処理する、というようなことはありません。何も出来なくなります。)

このあたりの認識がありませんでした。キューは必須の概念なのですね。
ご回答ありがとうございました。

投稿日時 - 2014-06-09 21:54:02

ANo.4

このQ&Aは役に立ちましたか?

10人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.3

ならば
>例えばAさんとBさんが同じ処理を行うボタンを押したとして、
>Aさんのリクエストが早ければAさんの処理、Bさんのリクエストが早ければBさんの処理が先に行われる。
というのを十万人に対して、しかも処理順を間違えることなく、さらに二重押しを防ぐため処理実行はともかくリクエストを受け取ったことを早期にボタンを押した人に返信する必要がある場合を考えてみてください。

そんな場合にキューを使って、とりあえずデータを受け取って返信するスレッドとキューの先頭のデータに対して処理をするスレッドを並走させればすっきりとしたシステムになりませんか?

そして、オンライン予約システムってちょうど上記のような要求がされるシステムですよね?

投稿日時 - 2014-06-09 01:58:18

補足

ご回答ありがとうございます。

投稿日時 - 2014-06-09 21:54:32

ANo.2

例えば、

・メッセージを受信してキューに入れるスレッド
・キューにメッセージが入っていたら取り出して処理するスレッドを起動するスレッド

という風にしてキューを利用すればメッセージを受信するスレッドは、メッセージに対する処理が終わるのをまたずにメッセージ受信処理ができます(キューがなかったらどうなるか考えてみてください)

投稿日時 - 2014-06-09 01:38:18

補足

ご回答ありがとうございます。

投稿日時 - 2014-06-09 21:55:04

ANo.1

キューはFIFO (先入れ先出しの待ち行列)と LIFO (後入れ先出しのスタック)があります。


例えばデータファイルを読んで(総行数を数えられる)
01/10 1行目
02/10 2行目
03/10 3行目
04/10 4行目
05/10 5行目
06/10 6行目
07/10 7行目
08/10 8行目
09/10 9行目
10/10 10行目

といった使い方ができます。

LIFOは

10/10 10行目
09/10 9行目
08/10 8行目
07/10 7行目
06/10 6行目
05/10 5行目
04/10 4行目
03/10 3行目
02/10 2行目
01/10 1行目

こんなこともできます。

データファイルと書きましたが、エディターを作るようなとき、
部分を指定して上下反転することができます。

apple char(01) 'りんご'
orange char(04) 'みかん'
grape char(05) 'グレープ'

があったら

apple char(01)
orange char(04)
grape char(05)

apple 'りんご'
orange 'みかん'
grape 'グレープ'

というような変換もできます。(データベースのテーブル作成で有効だったりする)

投稿日時 - 2014-06-09 00:50:17

補足

ご回答ありがとうございます。

投稿日時 - 2014-06-09 21:55:17

あなたにオススメの質問