我目前正在实现一个程序,需要我处理线程和进程。
:
-
有多个java进程在运行,每个进程可能有多个线程。当前的java实现是这样的,java中的线程id对于特定进程是唯一的,而不是在进程中。那么,是否有一种方法可以在多个进程中实现唯一的线程id ?
-
另外,我需要实现一个外部java程序来监视这些线程。通过监视,我的意思是,根据某些逻辑,我需要通知特定的线程(使用唯一的线程id)关于事件。是否有一种方法,我可以从外部程序访问线程。如果是,怎么做?
-
有没有其他的解决方案来实现类似的想法?
提前感谢。
您可以使用进程id和线程id的连接来唯一标识线程—例如,进程7038
中的线程23
可以标识为7038:23
。这样做的好处是,给定线程标识符,您就可以知道线程属于哪个进程。
一个非常简单的例子,说明基于TCP的解决方案可能是什么样子:每个工作进程都有一个线程,监听来自监控进程的TCP连接;预计当监控进程连接时,它将写一行包含该工作进程中线程的id。例如,工作进程必须保留一个HashMap
,将线程id映射到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.
}
可能还应该有一种方法让监视进程向工作进程询问其所有线程id。工作进程可以简单地维护一个进程id列表(以及每个进程侦听的端口),并且对于每个进程id,该进程内的线程id列表。
顺便说一下,正如@parsifal所说,知道你到底想要达到什么目标会很有趣。