2011-07-29 3 views
1

私はJavaでネットワーク関連のプログラムを構築しようとしています。以前のCの経験があります。Cでは、スレッドを実行するときに、スレッドとして実行するメソッドを定義します。Javaで異なるジョブを実行する複数のスレッドを実行する正しい方法は何ですか?

しかし、Javaでは、スレッドは常にメソッドrun()で実行され、各クラスにその名前のメソッドが1つあります。

少なくとも2つのスレッド、1つの計算用スレッド、1つのスレッドが他のアプリケーションとの通信に使用する必要があります。 (これは1スレッドでも可能ですが、まったく異なるジョブを実行する2つのスレッドを実行する正しい方法が何であるかを知りたいだけです)

以下は、スレッドをどのように実装したかのサンプルコードです。下のコードで生成されたスレッドが通信を行う場合、計算を行う別のスレッドを作成するにはどうすればよいでしょうか?

public class Server implements Runnable{ 

    static Thread myThread; 


    public void run() { 
     // TODO Auto-generated method stub 
    } 

    public static void main(String[] args) { 
     myThread = new Thread(new Server()); 
    } 


} 
+0

「他のアプリとのコミュニケーション」はどのようなものですか?あなたが意味することに応じて、私はその答えを見たいと思います。 – Marvo

+1

ヒント:スレッドが値を返すか例外をスローする必要がある場合は、RunnableではなくCallableインターフェイスを使用できます。 –

答えて

6

ThreadまたはRunnableを実装するクラスでmainメソッドを入れないでください。 は現在のServer実装で必要なものを実装することができますが、その理由はわかりません。懸念、およびKISSを分離:

  • public static void main(String[] args)方法
  • Server implements Runnableクラス(糸の一種)
  • Calculations implements Runnableクラス(スレッドの他のタイプ)
  • と退屈な、単純なクラス

mainメソッドを持つクラスは、ServerCalculationsスレッドを開始します。

+0

私は今考えを得る。 Javaも便利です。 – user482594

+1

うわー、5 upvotesはすでにですか? '> _>'それはいつも簡単な答えです –

+0

ところで、それは別のクラスで実行されている場合計算スレッドから結果をフェッチすることができますか?スレッドが戻り値を持つことは可能ですか?私が勉強しなければならない話題を私に教えてもらえますか?これは面白いです.. – user482594

0

Executors.newSingleThreadExecutor()を使用して、1つのスレッドを含むスレッドプールを作成します。 CallableオブジェクトをExecutorに送信します。ここでは、各インスタンスが計算を行います。計算の結果をフェッチするために使用できるFutureオブジェクトが返されます。計算自体は、Executorによって管理されるスレッドで実行されます。

関連する問題