
はじめまして。
使用ツール:Tomcat 6.0
前提条件:Tomcatのserver.xmlでmaxThreads="1"と記述し、同時にスレッドが1つしか動作しないようにしている
質問:
ブラウザでDBに登録されている全ての情報を取得し表示する時の動作。
ブラウザ(情報取得ボタン押下)
↓
サーブレット:DB(情報取得)
↓
ブラウザ(結果出力)
DBからの情報取得の処理が多少時間がかかってしまうため、その間にブラウザの中止ボタンが押下されてしまう場合があります。
その場合、ブラウザ⇔HTTPサーバ(Tomcat)でのセッションは切れているのですが、サーブレットの処理は継続して行われています。
再度、情報取得ボタンが押下されると、前提条件でスレッドが1つしか作成しないようにしているため、前の処理が終了するまで待機しするという形になっています。
この場合、中止→取得→中止→取得と何度も繰り返される(IEの場合取得ボタンを連打でも可)と、さらに結果の出力が遅くなるということがおきてしまいます。
これを解決するために、Tomcatが新しいリクエストを受け取った場合、現在のスレッドを破棄するといった形にできればと考えています。
上記の考えで調査を行っているのですが、良い情報を見つけることが出来ません。
実際にTomcatが現在実行中のスレッドを破棄し、新しいリクエストを受付けて処理を実行するといったようなことはできるのでしょうか?
ご存知の方がいらっしゃったら、どうか助言をよろしくお願いいたします。
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
多分というか間違いなく(少なくとも質問者が望む内容の)回答がつかないと思うので、何の回答にもなっていないのを承知で少しだけお話を。
> 実際にTomcatが現在実行中のスレッドを破棄し、新しいリクエストを受付けて処理を実行するといったようなことはできるのでしょうか?
仮にこんな事が発生したらそんなWebサーバー誰も使わんよね。正直HTTPサーバーとしてというかサーバー(サービスを提供する側)としてありえない動作だよね。新しい客が来たら今の客を放り出すって言ってんだから。なのでそんな機能は絶対に実装されていないと思います。
リスナーとかフィルターとか使っても多分無理だよね。フィルターの手前でブロックされると思う。
Tomcatの中身(スレッドプールを管理しているあたり)をがりがりいじればできるかも知れませんが、そんな事はしたくないですよね?
・・・・今これを書いてて思いついたんだけど、maxThreads="2"にしておいて、スレッドが一つ動いている最中にもう一つのスレッドが来た時、フィルターやサーブレットの先頭で自前でブロックしておくというのはどうかな。後はその2つのスレッド間で同期を取ってやればひょっとしたらなんとかできるかも知れない。
お早い解答をありがとうございます
>仮にこんな事が発生したらそんなWebサーバー誰も使わんよね。正直HTTPサーバーとしてというかサーバー(サービスを提供する側)としてありえない動作だよね。新しい客が来たら今の客を放り出すって言ってんだから。なのでそんな機能は絶対に実装されていないと思います。
確かに複数人の処理を扱うサーバとしてはおかしな動きですね。
ご指摘を受けるまで1人の人の動作という観点で考えていたので、前の処理を破棄するのが妥当かな?と考えておりました。
後の指示を待たせないように処理する場合、Tomcatでスレッドを1つに制限するという行為自体がおかしいということなのでしょうか?
maxThreads="2"に関しては試行してみますね
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- JavaScript javaScriptで画面に値を入れるには 1 2022/08/14 12:27
- JavaScript Javascriptを使ってQRコード読み取り、取得した情報をPOSTしたいと思っています。 1 2023/04/28 15:18
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- Access(アクセス) Access IF文でテーブルに存在しない場合の処理について 2 2022/10/10 18:09
- SQL Server DBのテーブルの設計ができず困っています。 2 2023/06/29 16:43
- Access(アクセス) Access 登録ボタンからサブフォームの更新 1 2022/07/22 10:23
- その他(法律) 職場の上司が、私の保有個人情報を勝手に、警察に提出していました。 これは違法ですか? 初めまして。行 3 2022/11/07 20:38
- 弁護士・行政書士・司法書士・社会保険労務士 ★行政書士試験の民法についての質問になります。 物権変動についての質問になります。 問 不動産の取得 1 2023/05/24 19:36
- 不動産鑑定士・土地家屋調査士 合筆された地積測量図の取得(登記情報提供サービス) 1 2022/07/13 00:30
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アコーディオンメニューをアン...
-
Javaプログラムからポップアッ...
-
Javaでのデバッグコード削除
-
jQueryでdiv作成後まで待ってか...
-
ExcelVBA で文字列の特定の文字...
-
重い処理中のアニメーションgif...
-
onBlurとonFocusの処理順序につ...
-
tryの終了
-
Tomcat高負荷時の設定について
-
do - while文
-
処理時間測定について質問があ...
-
「スレッド」の概念について質問
-
JSP、サーブレットの初期処理
-
JAVA ID重複処理
-
Tomcatのスレッドを破棄する方法
-
ftp 同時複数接続の負荷テスト...
-
数値の定数を付ける時
-
JavaScriptからJAVAクラスを呼...
-
JAVAにおける画像のJPEG保存の...
-
ラジオボタンの選択判定
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
tryの終了
-
Tomcat高負荷時の設定について
-
Javaプログラムからポップアッ...
-
Javaでのデバッグコード削除
-
アコーディオンメニューをアン...
-
C#で別スレッドの終了を知りたい
-
onBlurとonFocusの処理順序につ...
-
Javaアプリケーション実行の返...
-
JavaScriptからJAVAクラスを呼...
-
表示待ち時間に「処理中...」の...
-
ExcelVBA で文字列の特定の文字...
-
C#の処理をリアルタイムに表示...
-
ラジオボタンの選択判定
-
Javaの再帰でメソッド呼び出す...
-
数値の定数を付ける時
-
[Java] while(true)の意味
-
Javaプログラムから外部コマン...
-
WaitForSingleObjectの復帰時間
-
Tomcatのスレッドを破棄する方法
-
重い処理中のアニメーションgif...
おすすめ情報