- ベストアンサー
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 } }
- みんなの回答 (4)
- 専門家の回答
関連するQ&A
- マルチスレッドの実装について
只今、数冊の本を読み、現在マルチスレッドの部分を やっているのですが、 参考本AとBには class Sample extends Thread { というやり方が書いてあり、 参考本Cには class Sample implements Runnable { というやり方だけ書いてあります。 どういう事だと思い、クラスリファレンス本を読んでみると、 『マルチスレッドプログラミングを行う際にはthreadを継承するか、Runnableインターフェイスを実装します』 とだけ記述されていました。 参考本AとBは2002年に発行・改訂されており、「extends Thread」の説明しか載っていませんでした。 参考本Cは2000年発行で改訂はされていません。 Q:この2つは使い分けのようなものがあるのでしょうか?
- ベストアンサー
- 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
- 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
- synchronized を施しているのに・・・
java初心者です。宜しくお願い致します。 あるスレッドがsynchronizedのメソッドを実行すると、そのメソッドの仕事は連続したひとかたまりの処理として実行される、と習いました。 なるほど、と思ったのですが、 自分で次のようなコードを書いてみると、そのようになりません。 ならない時もある、と言ったほうが正確でしょう。 具体的には、 0 1 別の処理 2 や、 0 別の処理 1 2 となったりします。 ご面倒でしょうが、コードを書きますので、解析して解りやすく教えて頂けると嬉しく思います。 class MyRunnable10 implements Runnable{ public synchronized void run(){ for(int i=0 ; i<3 ; i++){ System.out.print(i + " "); } } } class MyRunnable20 implements Runnable{ public void run(){ System.out.print("別な処理"); } } public class Exec2 { public static void main(String[] args) { Runnable m = new MyRunnable10(); Runnable m2 = new MyRunnable20(); Thread t1 = new Thread(m,"A"); Thread t2 = new Thread(m2); t1.start(); t2.start(); } }
- ベストアンサー
- Java
- NoSuchMethodErrorが解決できません。
実行時エラーNoSuchMethodErrorが出て困っています。 どこを修正すればいいのでしょうか? class A implements Runnable{ int x; int y; public void run(){ for(int i = 0;i < 100;i++){ x++; y++; System.out.println("x="+x+"y="+y); } } } class B{ public static void main(String args[]){ new Thread(new A()).start(); new Thread(new A()).start(); } }
- ベストアンサー
- 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
- コンパイルエラー(Threadオブジェクト化)
Runnableを継承したNormalClassをThreadとしてオブジェクト化しようとしているのですが、コンパイルエラーが出現して困っています。どうすればいいでしょうか? 下記エラー参照 Main.java:1: NormalClass は abstract でなく、java.lang.Runnable 内の abstract メソッド run() をオーバーライドしません。 下記ソース class NormalClass implements Runnable{ } class Main extends Thread{ public static void main(String args[]){ test = new Thread(new NormalClass()); } }
- ベストアンサー
- Java
- [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アプレットとマルチスレッドの組み合わせ
Javaアプレットとマルチスレッドを組み合わせてパラパラ漫画のようなものを作りたいのですがうまくいきません。 import java.awt.Graphics; import java.awt.Image; public class kadai4 extends java.applet.Applet implements Runnable{ Image logoImage[]; Thread runner; int current; int last=6; public void init(){ logoImage=new Image[last]; for(int i=0;i<last;i++){ logoImage[i] = getImage(getCodeBase(),"image/logo" + (i+1) + ".gif"); } } public void start(){ if(runner == null){ runner = new Thread(this); runner.start(); } } public void stop(){ if(runner != null){ runner.stop(); runner=null; } } public void run(){ while(true){ for(int i=0;i<last;i++){ current=i; repaint(); pause(400); } } } public void paint(Graphics g){ g.drawImage(logoImage[current],50,25,50,50,this); } void pause(int time){ try { Thread.sleep(time);} catch (InterruptedException e) {} } } これを実行すると推奨されない API を使用またはオーバーライドしています。というエラーが発生するのですがどうすれば良いでしょうか?他の方法でも構いません
- ベストアンサー
- 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
お礼
返信が遅くなりました。ありがとうございます。大変勉強になりました。