2011-12-09 20 views
1

私は、Javaでクラスを作成して、マルチキャストグループへの接続、参加、送信、および受信のプロセスを簡素化しています。私の質問を説明する前に、下のサンプルを見てください。ちょうどあなたが私がやっていることのアイデアを持っています。Javaマルチキャスト受信データと並列処理

ここには、非常にの基本コードサンプルがあります。

//Connect to the multicast host, and join the group 
    MulticastSocket msConn = new MulticastSocket(5540); 
    InetAddress netAddr = InetAddress.getByName("239.255.255.255"); 
    msConn.joinGroup(netAddr); 

//Preapre a datagram packet in which to place recieved data 
    byte buf[] = new byte[1024]; 
    DatagramPacket pack = new DatagramPacket(buf, buf.length); 

//Code halts here until data is recieved 
    msConn.recieve(pack); 

注:それがすべてで例外がキャッチして、私の実際のコードに似ている、import文、等...それは単にそれがJavaのマルチキャスティング能力を活用する方法で私のクラスの基本的な流れを示していないことに注意してください。 メソッドでは、マルチキャストクラスがデータパケットを受信するまで、コードは停止します。もしそうなら、あなたは方法の例を提供してください可能性があり、

int i = 0; 

while(true) { 
    System.out.print(i); 
    i++; 
} 

は、これらのプロセスを並行して行うことができます、と私はまた、同時に、このコードを実行中に、Javaは常に新しいデータをリッスン持ってできるようにするには、希望これを行う?そうでない場合、別の回避策がありますか?

+1

私がやっているカウントループは何ですか?これらの2つのコードブロックはどのように関連していますか?それ以外の場合はもちろん、並列に実行することもできます。スレッドを2つ起動し、それぞれに1つのコードブロックを実行します。 – ziesemer

+0

これらは関連していません。それは、並行して実行する方法を知りたいと思っていた2つの分離された無関係のプロセスの単なる例です。これらのサンプルは私の実際のアプリケーションにはありません。 :) 2つのスレッドを同時に作成して実行する方法の例を教えてください。 –

+0

下記の@ Macの答えをご覧ください。 – ziesemer

答えて

3

あなたのプログラムが同時に処理をしたい場合は、スレッドを使いたいでしょう。

(匿名クラス、などのようなものにすることなく)最も簡単な方法は、Runnableを実装して別のクラスにあなたのプロセスのどちらか一方を分割すると考えられます。たとえば、次のようにCounterクラスを作る:

public class Counter implements Runnable { 
    public void run () { 
     int i = 0; 
     while(true) { 
      System.out.print(i); 
      i++; 
     } 
    } 
} 

次のように続いて、ちょうどあなたの他のコードの前に、あなたは新しいThreadを作成します。

Counter counter = new Counter(); 
Thread thread = new Thread(counter); 
thread.start(); 
... 
// The rest of your code goes here... 

この余分なスレッドはと並行して実行されます元のスレッドは、あなたのソケットコードの処理に移行しました。もしあなたが望むのであれば、それについても新しいスレッドを開始することができますが、すでに2つのスレッド(新しいスレッドと元のスレッド)があるので少し冗長です。

これは本当にスレッディングの表面を傷つけるだけです。この答えだけで私が本当に与えることができるよりもはるかに多いので、リンクされたドキュメントを読んで、Wikipediaのthreadの記事を読んで、このような仕組みがどのように優れているかを知ることを強くお勧めします。


1:あなたのスレッドは、彼らが本当に同時に実行されることはありません同じプロセッサ上で実行した場合、彼らはそうしているように見えるでしょう。

+0

Wow Mac。これは、あなたが私に与えた2番目の素晴らしい答えです。ありがとう!!!! –