• ベストアンサー

スレッドプールの意味・使い方がわからない

javaの初心者に毛が生えた程度の者ですが、 java のExecutorクラスなるものが出てきて、調べてもよくわかりませんでした。 スレッドプールの意味と使い方・利点、リスクなど、どなたか 教えて頂けますでしょうか? スレッドの基礎中の基礎は一応分かっているつもりです。。。

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

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

  • ベストアンサー
  • nora1962
  • ベストアンサー率60% (431/717)
回答No.1

サーバーリソースは有限です(CPU、メモリ、DISK I/O) そうした時に、要求のたびにスレッドを生成し消滅させるコストは要求量が増えていくと、かなりの負担になります。どうせ、要求はすぐ、来ると分かっているのなら、あらかじめスレッドを生成させておき、消滅させずに再利用を図ることによってスレッドの生成・消滅(後処理)のコストを減らせるわけです。 また、同時実行スレッドの数があまり多いとスレッド間のコンテキストスィッチングの無駄も馬鹿になりません。 スレッド数は適度にとどめて、処理待ちの要求についてはキューにためて順次処理を行っていく利用方法もあります。 データベースとの接続のような重い処理などは、コネクションプーリングを行うのも同様の発想です。 参考までに http://www.ibm.com/developerworks/jp/java/library/j-jtp0730/index.html

regorugo
質問者

お礼

とてもわかりやすい回答ありがとうございました! もっと勉強しておきます^^; ありがとうございました!

関連するQ&A

  • Threadのinterruptメソッドについて

    javaの勉強をしているんですが、Threadのinterruptメソッドの説明が「そのスレッドがwaitで待機している場合は、それを再開してwaitにInterrupException をスローさせる」と説明が書いてあるのですが、意味が理解できません。 スローさせるスレッドは待機状態であったスレッドを指し例外がスローされて、catch文に処理が移るのでしょうか? 初心者なので分かりやすく説明をお願い致します。

  • Javaアプレットで複数のスレッド (初心者です)

    javaアプレットで二つのスレッドを作り、それぞれからパラパラアニメ(0.4秒間隔で絵が変わるものanime1と0.7秒のものanime2)を表示させたいと考えています。 パラパラアニメ本体はhttp://www.ipc.hokusei.ac.jp/~z00104/java/anim.htmlをほぼコピーで使わせてもらい、それ単体では動かせました。 しかし二つスレッドを作るためにRunnableを実装したクラスを二つ用意して、それをまた別の一つのクラスから呼び出すことがうまくできません。 public class oshietegoo extends Applet{ anime1 aa = new anime1(); anime2 bb = new anime2(); Thread a = new Thread(aa); Thread b = new Thread(bb); a.start(); b.start(); //(スレッドの作成についてはhttp://www.tohoho-web.com/java/thread.htmを参考にしました) } class anime1 extends Applet implements Runnable{ 【中身は最初のURLのコピー】 } class anime2 extends Applet implements Runnable{ 【中身は最初URLのコピー】 } というように書いているのですが、a.start();とb.start();のところで「トークン "start" に構文エラーがあります。このトークンの後には Identifier を指定する必要があります」とエラーが出てしまいます。 色々と調べたり、インスタンスやクラスなど基本的な概念を勉強したりしたつもりなのですが、なぜエラーが出るのか分かりませんでした……。 どなたか解決法を教えていただけませんでしょうか? 初心者な質問で申し訳ないのですが、お力添えいただけると助かります。 不足があれば追記いたしますので、よろしくお願いいたします。

    • ベストアンサー
    • Java
  • 実行時に出るエラーの意味が解りません

    Javaで、「SystemFont 」というクラス名をつけて プログラムを組み、コンパイルしてその後実行したところ Exception in thread "main" java.lang. NoClassDefFoundError:SystemFont というエラーが表示されるだけで実行できません。 このエラーの示す意味をどなたか教えて頂けませんか?

    • ベストアンサー
    • Java
  • wait()したスレッドが起こされるタイミング

    以下のコードにおいて。 % java ThreadWaitTest 2 の場合はaと表示したまま止まりますが、 % java ThreadWaitTest 1 の場合はスレッドの終了に伴ってwait()が切れ、bまで表示します。 私の望む動作は前者です。 後者の場合、これはつまりスレッドをwaitした際の待機プールがスレッドオブジェクトの場合、そのスレッドの実行が終了すると待機プールにある待機スレッドを自動でnotify()してしまうことを意味していると思うのですが、この解釈はあっていますか? Java のAPIドキュメントに 「別のスレッドが notify メソッドまたは notifyAll メソッドを呼び出してこのオブジェクトのモニター上で待機するスレッドに通知を出すまで待機します」 とあるように、ユーザが明確的にnotifyしないと起こらないと思いこんでいました。 なぜこういう仕様になっているのでしょうか? また、この仕様について詳しく書いてあるサイトやドキュメントなどありませんでしょうか? public class ThreadWaitTest extends Thread {  public Object mutex = new Object();    public static void main(String[] args) {   try {    ThreadWaitTest test = new ThreadWaitTest();    test.start();    System.out.println("a");    switch (new Integer(args[0])) {    case 1:     synchronized(test) {      test.wait();     }     break;    case 2:     synchronized(test.mutex) {       test.mutex.wait();     }     break;    }    System.out.println("b");   } catch (InterruptedException ie) {    ie.printStackTrace();   }  }  public void run() {   try {    Thread.sleep(5000);   } catch (InterruptedException ie){    ie.printStackTrace();}   } }

    • ベストアンサー
    • Java
  • C++のこの書き方の意味教えて

    C++初心者です。 他人が作ったプログラムを修正しないといけなくなったのですが、調べても意味がわからない箇所が 多々あります。 どなたか、得意な方、だいたいでよいのでわかる方、助けてください。 1.    static Thread *SecondProcess =         new Thread(Form1 , false) ちなみにthread はクラス名で、Thread(Form1 , false)はそのクラス内のメンバー関数のようです。 この文を実行したあとに、 __fastcall Thread::Thread(TForm1 *InForm , bool   CreateSuspended) : TThread(CreateSuspended) { Form1 = InForm; } という違うユニットの文を実行しているようなのですが どうして次にここにいくのかもよくわかりません。 Thread(TForm1 *InForm , bool CreateSuspended) : TThread(CreateSuspended) の:はどういう意味なのでしょう?

  • wait中にinterruptを呼ばれたスレッドの振る舞いについて

    はじめまして。javaの初心者です。 どうしてもわからないことがあります。 例えば、以下のコードで、 class Foo { public synchronized void foo() { while(条件) { try { this.wait(); } catch(InterruptedException ex)    {     処理    } } } } wait中であったスレッドは、他のスレッドによって interrupt()メソッドを実行されたときは、Fooの ロックを取得してからcatch節を実行すると思うのですが、もし、以下のコードの場合は、 class Foo { public synchronized void foo() throws InterruptedException { while(条件) { this.wait(); } } } wait中であったスレッドは、他のスレッドによって interrupt()を実行されたときにすぐにInterrupted Exceptionをスローするのか、それとも Fooクラスのロックを取得してからInterruptedExceptionをスローするのかどちらなのか がわかりません。どうか教えてください。よろしく お願いします。

    • ベストアンサー
    • Java
  • Exception in thread "main" java.…でも。

    Javaの初心者です。 仕事で他の方が作ったプログラムをいじることになりました。 あるclassファイルを実行しようとしたところ、javaコマンドで実行しようとしたところ、タイトルにあるように、Exception in thread "main" java.lang.NoClassDefFoundError:というエラーメッセジーが出ました。 いろいろ調べた結果、「:」以降に出てくる名前のクラスが見つからず、大半の場合は、CLASSPATHの指定がされていなかったり、まちがっていることが分かりました。 ただ、今回、表示されたのは、こんなクラス名なんです。 org/apache/bcel/generic/ATHROW bcel-5.1.jarというファイルはあるのですが、これをどこかに置いたら解決するものなのでしょうか? ためしに、実行しようとしたclassファイルと同じディレクトリに置いてましたが、何の効果もありませんでした。 もしお分かりになる方がいらっしゃいましたら、よろしくお願い致します。

    • ベストアンサー
    • Java
  • やさしいJavaを読み終えて

    Java初心者です、 やっと"やさしいJava"を読み終えたのですが 次に読む本として何が相応しいのか分かりません。 自分としてはSwingなどでアプリや簡易ゲームなど作成したいです、 ですが未だクラスライブラリの使い方が良く分からないです。 継承やスレッドなど基礎中の基礎は覚えたのですが、 クラスライブラリの扱い方がちゃんと理解出来てないので ウィンドウ等を使ったGUIプログラムが作成出来ません。 何方かクラスライブラリの扱い方などが書いて有る書籍、 やさしいJavaの次に読む書籍など有りましたら教えて頂けませんか? もちろん書籍に限らずWebサイトでもOkです、 ご回答お待ちしております。

    • ベストアンサー
    • Java
  • スレッドの状態遷移について。。。

    Javaの本を買って読んでいます。 その中の「スレッド」のカテゴリーの「状態遷移」のところの「synchronized」の部分に、こう書かれています。 -------------------------- ・・・・・・ なお、sleepメソッドでスリープ状態(実行不可能状態)になったスレッドはロックを保持したまま開放しません。 そのため、ロックを取得できないで待たされるスレッドも実行不可能状態へ移行させられます。 -------------------------- これは、Synchronized指定されたメソッド(同期メソッド)の部分で出てきた文章でして、 私は、こう解釈しました。 → 例えば、同じオブジェクトの参照を引数とするスレッドが3つあり、その中の1つが『実行中』状態にある(仮に t1 とする)として(つまり残り2つ( t2 t3 )は『実行可能状態(プール)』にある。)、 実行中の t1 がsleep()メソッドで『実行不可能状態』になった場合、 『実行可能状態』にあった、t2 t3 も『実行不可能状態』へ移行する事になる。 間違っていますか? もし、この解釈が正しければ、こうなりますよね? t1・・・・・・・『実行中』 → 『実行不可能状態』 t2 t3・・・『実行可能状態』 → 『実行不可能状態』 ところが、状態遷移の5つの状態の図を見ると、 『実行可能状態』 から 『実行不可能状態』 へは、矢印→が書かれておりません。(逆向きの矢印がありますが。) どういう意味でしょうか。 java初心者ですが、 解りやすく教えて頂けると助かります。 宜しくお願い致します。

    • ベストアンサー
    • Java
  • このエラーメッセージの意味を教えてください

    超、超初心者です。 やさしいjavaという本の通りに進めているつもり なのですが、どういう意味か教えてください。 基本的なことですみません。。。 よろしくお願いします。 C:\YJSample\01>javac Sample1.java Sample1.java:7: '}' がありません。 { ^ エラー 1 個 C:\YJSample\01>javac Sample1.java

    • ベストアンサー
    • Java

専門家に質問してみよう