Java多播接收数据和并行处理

时间:2011-12-09 01:48:10

标签: java parallel-processing multicast

我正在用Java编写一个类来简化从多播组连接,加入,发送和接收数据的过程。在我描述我的问题之前,请先查看下面的示例,这样您就可以了解我在做什么。

这是我正在做的 very 基本代码示例。请注意,它完全不像我的实际代码,有例外捕获,导入语句等等......它只是简单地展示了我的类在如何利用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);

请注意,在receive()方法上,代码会停止,直到多播类接收数据包。我将能够让Java持续监听新数据,同时还能同时执行此代码:

int i = 0;

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

这些流程是否可以并行完成,如果是这样,请您提供一个如何执行此操作的示例?如果没有,还有其他的解决方法吗?

1 个答案:

答案 0 :(得分:3)

如果您希望程序同时执行操作,则需要使用线程。 1

最简单的方法(不涉及匿名类等)可能会将您的一个或另一个进程拆分为一个实现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:如果您的线程在同一个处理器上运行,它们实际上不会同时运行,它们似乎只是这样做。