• 締切済み

Javaのサーブレットについて(マルチスレッド)

サーブレットについて質問です。 サーブレットは1インスタンス・複数スレッドという形態で、 サーブレットコンテナにより管理されていると思います。 では、このコンテナ内では、どのように1インスタンス・複数スレッドを 実現しているのでしょうか? 以下、自分なりに考えたプログラムです。 たぶん、このようにすれば、1インスタンス・複数スレッドになるのかと思うのですが。 どなたかご教授願いますでしょうか。 よろしくお願いいたします。 【1インスタンス・複数スレッドプログラム例】 public class TestThread extends Thread { public void run() { System.out.println("TestThread.run()"); } public static void main(String[] args) { Thread tt = new TestThread(); Thread th1 = new Thread(tt); Thread th2 = new Thread(tt); th1.start(); th2.start(); } }

  • Java
  • 回答数1
  • ありがとう数2

みんなの回答

  • Bonjin
  • ベストアンサー率43% (418/971)
回答No.1

>サーブレットは1インスタンス・複数スレッドという形態 サーブレットクラスのインスタンスを複数のスレッドで利用していると言うことです。 Tomcatのソースなどを見てみればわかりやすいかと思います。

skdy-19ik
質問者

お礼

ありがとうございます。 Tomcatのソースを確認してみたいと思います。

関連するQ&A

  • [javaプログラムについて] うまく動きません。

    import java.*; class Test { void main() { Th th1 = new Th("01スレッド"); Th th2 = new Th("02スレッド"); th1.start(); th2.start(); } } class Th extends Thread { void run(String pri) { for (int i=0;i<5;i++) { System.out.println(pri + " : " + i); } } } スレッドの使い方がいまいちよく分かりません。 どこが間違っているのか教えてください。 宜しくお願い致します。

    • ベストアンサー
    • Java
  • java repaint()に関して

    プログラムで以下のpaintComponents内のデバックができません。 理由は一体何なのでしょうか? お願いします。 import java.awt.Graphics; import javax.swing.JPanel; public class MainPanel extends JPanel implements Runnable { Thread th; public MainPanel() { super(); } public void movestart() { th = new Thread(this); th.start(); } public void paintComponent(Graphics g) { System.out.println("このデバックができない"); super.paintComponent(g); } public void run() { while (true) { System.out.println("ここのデバックはできている"); repaint(); try { th.sleep(100); } catch (Exception e) { } } } }

    • ベストアンサー
    • Java
  • JAVAのマルチスレッドの共有変数についての質問

    JAVAのマルチスレッドの共有変数についての質問です。 スレッドを2つ作ってその2つのスレッド共有の配列を作りたいのですがどうすれば良いのでしょうか。 コードは以下のとおりです。 public class testes extends Thread { int n; int a[]={10,10}; public testes(int n){ this.n = n; } public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ testes t1 = new testes(0); testes t2 = new testes(1); t1.start(); t2.start(); } public void run(){ a[n] =n; System.out.println(a[0]+","+a[1]); } } 実行すると(0,10)もしくは(10,1)が表示されます。 このとき(0,1)と表示するにはどうすれば良いのでしょうか。

  • Servletとマルチスレッド

    以下のようにServlet側のある部分をマルチスレッドで実装しましたが、まったく速くなりません。Servletはもともとマルチスレッドで動いてるから速くならないのか、それとも自分のソースがおかしいのかわかりません、どなたかおしえていただけますか? public class ***Servlet exends ** { private void hogehoge(){ HogeThread hoge1 = new HogeThread(); Thread th1 = new Thread(hoge, ""); th1.start(); HogeThread hoge2 = new HogeThread(); Thread th2 = new Thread(hoge, ""); th2.start(); } } class HogeThread implements Runnable { public void run() { // hogehoge } }

    • ベストアンサー
    • Java
  • javaでアニメーションを簡単に作るには?

    5枚の絵をループでアニメーションさせたいのですが。フレームを表示させるところまでは出来たのですが、その先がよく分かりません。どのようにしてアニメーションすればいいのでしょうか? よろしくお願い致します。 package animation; import java.awt.*; import javax.swing.*; public class Animation extends JFrame implements Runnable{ Animation () { getContentPane ().setLayout (new FlowLayout ()); setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); setSize (200, 300); setVisible (true); Thread th = new Thread (); th.start (); } public void start(){ } public void run(){ } /** * @param args the command line arguments */ public static void main (String[] args) { // TODO code application logic here Animation anime = new Animation (); } }

  • java 選択肢に制限時間を設ける

    こんにちは. 現在javaでプログラムを組んでいるのですが,その中で選択肢を表示させる部分があります. この選択肢の選択に制限時間を設けたいのですが,うまくいきません. このプログラムの実現のためにどんな方法があるでしょうか? どなたかご教授お願いします. なお, public class time extends Thread { public void run() { for (int i = 3; i >= 0 ; i--) { try { sleep(1000); } catch (InterruptedException e) {} System.out.println(i); } } public static void main(String[] args) { time t = new time(); t.start(); try { System.out.println("スレッド t の終了を待機します。"); t.join(); // カウントダウンが終了するのを待つ System.out.println("スレッド t が終了しました。"); } catch (InterruptedException e) {} } } こちらのソースを参考にプログラムを書いてみましたがだめでした.

    • ベストアンサー
    • Java
  • Runnableのインスタンス化について

    下記のコードについてです。 Runnableがインスタンス化されていますが、 どうしてそれが可能なのかが分かりません。 分からない点は 1.Runnableはインタフェースであるから、本来、直接インスタンス化は不可能であるはず。 2.しかし、Runnableはクラスライブラリjava.langパッケージに含まれている。 だからインスタンス化は可能なのかもしれない。 3.あるいは、下記のコードではメソッド内の無名クラスであるから、「new Runnable(){」の 部分でスーパークラスとしてのRunnableを継承したサブクラスを生成しているのかもしれない。 アドバイスをよろしくお願い致します。 public class Main{ public static void main(String[]args){ Runnable task = new Runnable(){ public void run(){ System.out.println("run"); } }; Thread thread = new Thread(task){ public synchronized void start(){ System.out.println("start"); } }; thread.start(); } }

    • ベストアンサー
    • Java
  • javaについて教えて下さい!

    class SampleA implements Runnable { int tmp1 = 0; int tmp2 = 0; public synchronized void run(){ try{ if(tmp1 == 1){ System.out.print("は"); System.out.print("め"); else if (tmp1 == 2){ System.out.print("じ"); System.out.print("て");          } if(tmp2 == 0) tmp2 = tmp2 + 1; System.out.print("ま"); } System.out.print("。"); }catch(InterrupedException e){ System.out.print("し"); } } } //Sample2.java class Sample2{ public static void main(String[] args){ Sample1 sp = new Sample1(); Thread th1 = new Thread(sp); Thread th2 = new Thread(sp); th1.start(); th2.start(); } } wait(),notify(),throwを使って例外を生じさせるところまではわかったのですが このプログラムを「はじめまして。」と順番に出力するにはどうすればいいですか? プログラム内容は追記する形でお願いします。

    • ベストアンサー
    • Java
  • Java言語のインタフェースについて

    Java言語を学習している者です。 インターフェースについて理解できずに困っております。 ここでは、Runnableインターフェースを例にとります。 (1)正しいコード public class ThreadTest implements Runnable { public static void main (String args[]) { ThreadTest ins = new ThreadTest(); Thread th = new Thread(ins); th.start(); for(int i = 0; i < 10; i++) { System.out.println("main : " + i); } } public void run() { for(int i = 0; i < 10; i++) { System.out.println("run : " + i); } } } (1)のコードは正常に動きます。 (2)間違ったコード (implements Runnableを記述しなかった場合) public class ThreadTest{ public static void main (String args[]) { ThreadTest ins = new ThreadTest(); Thread th = new Thread(ins); th.start(); for(int i = 0; i < 10; i++) { System.out.println("main : " + i); } } public void run() { for(int i = 0; i < 10; i++) { System.out.println("run : " + i); } } } (2)のコードでは、 Thread th = new Thread(ins); で、 コンストラクタ―Thread(ThreadTest)は未定義です。 とエラーが出てしまいます。 確かに未定義なのですが、(1)でも定義していないように思えます。 Runnableインターフェースの働きのお陰だと言うことはわかるのですが、どういった働きによるものなのかがわかりません。 インターフェースのについて、 ・インターフェースのフィールドは必ず定数。 ・インターフェースのメソッドは必ず抽象メソッド。 ・インターフェースはインスタンスを作ることが出来ない。 ・抽象メソッドは必ず実装しなければならない。 は理解しているつもりです。 今回の質問をするに当たって、 RunnableのAPI http://java.sun.com/javase/ja/6/docs/ja/api/java/lang/Runnable.html を見たのですが、それでも理由が分からないので質問致します。 もし宜しかったら、APIの見方についてもコメントして頂けるとありがたいです。 宜しくお願いします。

    • ベストアンサー
    • Java
  • extendsの使い方

    public class ThreadSample3 { public static void main(String[] args) { ThreadA ta = new ThreadA(); ThreadB tb = new ThreadB(); ta.start(); tb.start(); } } class ThreadA extends Thread { public void run() { try { for(int i = 0; i < 10; i++) { Thread.sleep(1000); System.out.println("ThreadA"); } } catch (InterruptedException e) { } } } class ThreadB extends Thread { public void run() { try { for(int i = 0; i < 10; i++) { Thread.sleep(2000); System.out.println("ThreadB"); } } catch (InterruptedException e) { } } } これは、ThreadAとThreadBを10回ずつ表示させるプログラムなのですが、extendsは子供と親の関係に当たり、例えば親クラスボールだったら子クラスが野球ボールやゴルフボールになると習いました。 class ThreadA extends Thread{ の部分はThreadとThreadAが親子関係になっていますか? またどうして子クラスの名前と親クラスの名前はこう書かないといけないですか。 

    • ベストアンサー
    • Java

専門家に質問してみよう