2011-12-09 16 views
1

我正在用Java编写一个类,以简化连接到,加入,发送和接收来自多播组的数据的过程。在我描述我的问题之前,请看下面的示例,以便您了解我在做什么。Java多播接收数据和并行处理

这是一个我正在做的基本代码示例。需要注意的是它根本不会像我的实际代码,与异常捕获,import语句,等等......它只是表明我的课中如何利用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); 

注意在方法中,代码将暂停,直到multicaster类接收到数据包。我想,能够有Java的新的数据,连续听的同时,也同时执行此代码:

int i = 0; 

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

难道这过程中并行进行,并且,如果是这样,请你提供怎样的例子做这个?如果没有,是否还有其他解决方法?

+1

你用'i'做的计数循环是什么?这两个代码块如何相关?否则,当然可以并行执行它们 - 只需启动2个线程,每个线程都运行一个代码块。 – ziesemer

+0

它们并不相关,它只是我想知道如何并行运行的两个分离的无关进程的一个例子。这些样本不在我的实际应用中。 :)请给我一个如何同时创建和运行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... 

这额外的线程将并行执行与原始线程,现在已经转移到处理您的套接字代码。如果你愿意,你当然也可以为它启动一个新的线程,但是由于你已经有两个线程(你的新线程和原始线程),所以它有点多余。

这实际上只是抓住了线程的表面。这个答案远远超出我的实际水平,所以我强烈建议您阅读链接的文档,阅读维基百科上的thread文章,并查找其他信息以更好地了解这些内容的工作原理。


1:如果你的线程在同一个处理器上运行,它们将不会同时运行,它们似乎只是在这样做。

+0

Wow Mac。这是你今天给我的第二个很好的答案。谢谢!!!! –