2011-12-09 26 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。這是你今天給我的第二個很好的答案。謝謝!!!! –