Вы можете использовать объединение идентификатора процесса и идентификатора потока для уникальной идентификации потока - например, поток 23
в процессе 7038
может быть идентифицирован как 7038:23
.Это имеет то преимущество, что, учитывая идентификатор потока, вы можете сказать, какому процессу принадлежит поток.
Я сомневаюсь, что один процесс может управлять потоками другого.Вам, вероятно, нужно использовать какую-то форму межпроцессного взаимодействия, например RMI , именованные каналы или TCP.Каждый процесс, вероятно, должен иметь один поток, который ожидает входящее сообщение, анализирует его и уведомляет соответствующий поток на основе содержимого сообщения.
A очень простой пример того, что такое TCPрешение на основе может выглядеть следующим образом: каждый рабочий процесс имеет поток, который прослушивает TCP-соединения из процесса мониторинга;ожидается, что при подключении процесса мониторинга он напишет одну строку, содержащую идентификатор потока в этом рабочем процессе.Рабочий процесс должен сохранять, например, HashMap
, который сопоставляет идентификаторы потоков с Thread
объектами.
ServerSocket socket = new ServerSocket(6789);
while (true) {
Socket connectionSocket = welcomeSocket.accept();
BufferedReader socketReader = new BufferedReader(new InputStreamReader(
connectionSocket.getInputStream()));
String line = socketReader.readLine();
int threadId = Integer.parseInt(line);
// Now, use threadId to locate the appropriate thread
// and send a notification to it.
}
Вероятно, у процесса мониторинга должен быть способ запрашивать у рабочего процесса все идентификаторы потоков,Рабочий процесс может просто поддерживать список идентификаторов процессов (и какой порт прослушивает каждый процесс) и, для каждого идентификатора процесса, список идентификаторов потоков внутри этого процесса.
Кстати, @parsifalсказал, что было бы интересно узнать, чего вы на самом деле пытаетесь достичь.