如何在这种情况下实现线程?

时间:2012-03-21 23:05:45

标签: java multithreading concurrency

我目前还没有任何代码,但我有一种情况,我将在无线传感器上实现Java应用程序。只能有一个 main 方法。

还有多个其他无线传感器可以连接到我的传感器。我的传感器需要根据其他传感器提供给我的信息进行计算。每个传感器可以选择是否要参与计算。每隔1秒,我的传感器就会进行一次计算。

基本上,我需要的是监听传入的传感器,为它们提供与之交互的线程,并从每个传感器中检索信息。

我的问题是,在我的应用程序中,我如何监听传入的传感器(阻止调用)并释放我的应用程序来执行其计算?

3 个答案:

答案 0 :(得分:1)

从高层次来看,这就是您的应用程序将要做的事情

==主线程==

  1. 启动套接字
  2. 开始处理线程
  3. 接受传入连接(这将导致线程阻塞,直到发生连接)
  4. 启动新线程来处理socket(处理程序线程)(或者使用线程池,但这更复杂)
  5. 返回3
  6. ==处理程序主题==

    1. 从主线程接收打开的套接字
    2. 将来自套接字的数据保存到处理线程
    3. 完成并关闭套接字
    4. ==处理线程==

      1. 等一下
      2. 从处理程序线程的第2步检索的处理数据
      3. 返回1

答案 1 :(得分:1)

您需要另一个接收所有通信线程信息的线程。您应该查看java.util.concurrent中的实用程序,例如BlockingQueue,它允许线程安全地将数据传递给另一个线程。

最重要的是,您应该阅读很多关于多线程的内容:这不是一个微不足道的主题。

答案 2 :(得分: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(); 
  } 
}