Как я могу реализовать потоки в этом сценарии? - PullRequest
1 голос
/ 22 марта 2012

В данный момент у меня нет никакого кода, но у меня есть ситуация, когда я буду внедрять Java-приложение на беспроводной датчик. Может быть только один основной метод.

Там будет несколько других беспроводных датчиков, которые могут подключаться к моему датчику. Мой датчик должен выполнить расчет на основе информации, предоставленной мне другими датчиками. Каждый датчик может выбрать, хотят ли они участвовать в расчете. Каждую 1 секунду мой датчик выполняет расчет.

Итак, в общем, мне нужно слушать входящие датчики, предоставлять им поток для взаимодействия и получать информацию от каждого датчика.

У меня вопрос в моем приложении, как мне прослушать входящие датчики (блокировка вызова), а также освободить мое приложение для выполнения его расчетов?

Ответы [ 3 ]

1 голос
/ 22 марта 2012

Вам нужен другой поток, который получает информацию обо всех коммуникационных потоках. Вы должны взглянуть на утилиты в java.util.concurrent, такие как BlockingQueue, которые позволяют потокам безопасно передавать данные друг другу.

Больше всего вы должны прочитать много о многопоточности: это не тривиальная тема.

1 голос
/ 22 марта 2012

На высоком уровне это то, что будет делать ваше приложение

== Основная тема ==

  1. пусковое гнездо
  2. Начало обработки потока
  3. принять входящее соединение (это приведет к блокировке потока, пока не произойдет соединение)
  4. запуск нового потока для обработки сокета (потока-обработчика) (в качестве альтернативы используйте пул потоков, но это более сложно)
  5. возврат к 3

== Поток обработчика ==

  1. Получить открытый сокет из основного потока
  2. Сохранить данные, поступающие из сокета, для передачи в поток обработки
  3. Завершить и закрыть сокет

== Обработка темы ==

  1. Подождите 1 секунду
  2. Обработка данных, полученных на шаге 2 потока обработчика
  3. Возврат к 1
0 голосов
/ 22 марта 2012

Это поможет вам начать.При необходимости добавьте проверку / обработку ошибок / исключений.

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(); 
  } 
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...