Nano Hash - криптовалюты, майнинг, программирование

Поток Java отслеживает другие потоки

У меня есть класс с именем class1, в котором у меня есть следующий код:

public class class1 {
    public static ServerSocket serverSocket;

     public static void main(String args[]) {        
        try {
            serverSocket = new ServerSocket(1234);
            while (true) {
                class2 t = new class2(serverSocket.accept());
                t.start();
            }
        } catch (IOException ex) {
            Logger.getLogger(LisenerServer.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

Итак, в классе 1 я открываю новый поток для каждого соединения.

И у меня есть еще один класс с именем class2, в котором у меня есть следующий код:

public class class2 extends Thread {
    private Socket socket;

    public class2(Socket socket) {
        try {
            this.socket = socket;
            in = new BufferedInputStream(socket.getInputStream());
            out = new DataOutputStream(socket.getOutputStream());
        } catch (IOException ex) {
            Logger.getLogger(ListenerServerThread.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    @Override
    public void run() {
       while (true) {
           try {
               // do something with in and out.
           } catch (IOException ex) {
               System.out.println(ex);
               break;
           } 

       }
    }
}

Я хочу, чтобы клиенты (не Java-программы) подключались к моему серверу сокетов и отправляли команды sting, и я хочу знать, подключен ли клиент (я буду идентифицировать клиента по имени потока и/или идентификатору, открытому в классе 1) или нет .

Могу ли я создать другой класс, скажем, класс 3, в котором я открываю один поток, чтобы постоянно проверять, подключены ли клиенты или нет? Если можно, не могли бы вы привести пример?


  • Почему бы вам не использовать RMI? 05.06.2013
  • stackoverflow.com/questions/2170520/ среди многочисленные другие. Вы в основном спрашиваете, научите меня, как выполнять межпотоковое взаимодействие в Java. 05.06.2013
  • @Makky Зачем ему вообще использовать RMI и как он собирается использовать его от клиентов, отличных от Java? 05.06.2013
  • Что ж, если он собирается использовать его с клиента, отличного от Java, тогда существующее решение само по себе не будет работать. 05.06.2013
  • Хорошо, я понимаю. Марко. Ты прав. 05.06.2013

Ответы:


1

Надеюсь, я правильно понял вопрос, согласно тому, что я понял, вы можете вести глобальный список подключенных клиентов, например:

List<class2> MyList;

Когда поток class2 запускается, он добавляет себя в список:

public class2(Socket socket) {
   try {
      this.socket = socket;
      in = new BufferedInputStream(socket.getInputStream());
      out = new DataOutputStream(socket.getOutputStream());
      MyList.add(this);
   }
   catch (IOException ex) 
   {
       Logger.getLogger(ListenerServerThread.class.getName()).log(Level.SEVERE, null, ex);
   }
}

Когда поток завершается, он удаляет себя из списка:

Try
{
   while (true) {
      try {
          // do something with in and out.
      } catch (IOException ex) {
         System.out.println(ex);
         break;
      } 
    }
} 
finally {
    for (int i=0; i < MyList.size(), i++)
       if (MyList.get(i) == this) 
       {
           MyList.delete(i);
           break;
       }
}

Таким образом, вы можете получить список подключенных клиентов через его поток. Вы можете добавить некоторый метод в свой class2 для доступа к дополнительной информации, такой как сокет, время его работы и т. д. и т. д. Кроме того, вам следует рассмотреть возможность доступа к этому списку (при добавлении/удалении) с помощью мьютекса или другого метода синхронизации. .

05.06.2013
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..