2012-03-21 64 views
1

我目前還沒有任何代碼,但我有一種情況,我將在無線傳感器上實現Java應用程序。只能有一個主要的方法。如何在這種情況下實現線程?

將會有多個其他無線傳感器可以連接到我的傳感器。我的傳感器需要根據其他傳感器提供給我的信息進行計算。每個傳感器可以選擇是否要參與計算。每1秒鐘,我的傳感器進行一次計算。

所以基本上,我需要的是偵聽傳入傳感器,爲它們提供一個線程來與其交互,並從每個傳感器中檢索信息。

我的問題是,在我的應用程序中,如何監聽傳入的傳感器(阻止呼叫)並釋放我的應用程序以執行其計算?

+0

您正在描述一個偵聽連接的多線程服務器。有關教程,請參見[本頁]的底部(http://docs.oracle.com/javase/tutorial/networking/sockets/clientServer.html)。 – 2012-03-21 23:07:41

+0

嗨@AdamMihalcin。 Thansk爲您的答覆。因此,在'KKMultiServer'類中,它們有一個阻塞並等待套接字連接的while循環。這與我想要的相似。但是,該類只能接受傳入連接,而沒有其他任何內容。我的問題是我需要做其他計算,同時等待傳感器進行通信。我希望這是有道理的。 – Jay 2012-03-21 23:17:09

+0

運行另一個線程進行計算? – Ishtar 2012-03-21 23:33:22

回答

1

從一個高的水平,這就是你的應用程序會做

==主線程==

  1. 開始插座
  2. 開始處理線程
  3. 接受傳入的連接(這將導致線程阻塞,直到發生連接)
  4. 啓動新線程來處理套接字(處理線程)(或者使用線程池,但這會更復雜)
  5. 返回3

==處理器線程==

  1. 接收來自主線程中打開套接字
  2. 保存數據從插座進來要給予處理線程
  3. 完成,關閉插座

==處理線程==

  1. 等待1秒從處理線程的步驟2中檢索
  2. 過程數據
  3. 返回到1
+0

感謝您在構建答案時的時間。這似乎是一個合乎邏輯的解決方案。我將調查這個實現。 – Jay 2012-03-21 23:56:52

1

需要接收所有通信線程的信息的另一線程。您應該查看java.util.concurrent中的實用程序,例如讓線程安全地將數據傳遞給另一個線程的BlockingQueue。

大部分你應該閱讀很多關於多線程:它不是一個平凡的話題。

+0

你說得對。我對Java並不陌生,但我對多線程不太熟悉。我已經看到了一些關於BlockingQueue的東西,但是也許我可以使用'wait()'和'notify()'函數。 – Jay 2012-03-21 23:58:48

0

這會讓你開始。根據需要添加錯誤/異常檢查/處理。

public class Test { 
    static class WorkTask42 implements Runnable { 
    public void run() { 
     // background work    
    } 
    } 
    public static void main(String... args) throws Exception { 
    // repeat for each background task 
    WorkTask42 wt = new WorkTask42(); 
    Thread a = new Thread(wt); 
    a.setDeamon(true); 
    a.start(); 
    } 
}