您可以分配唯一的线程id和访问线程从外部程序



我目前正在实现一个程序,需要我处理线程和进程。

:

  1. 有多个java进程在运行,每个进程可能有多个线程。当前的java实现是这样的,java中的线程id对于特定进程是唯一的,而不是在进程中。那么,是否有一种方法可以在多个进程中实现唯一的线程id ?

  2. 另外,我需要实现一个外部java程序来监视这些线程。通过监视,我的意思是,根据某些逻辑,我需要通知特定的线程(使用唯一的线程id)关于事件。是否有一种方法,我可以从外部程序访问线程。如果是,怎么做?

  3. 有没有其他的解决方案来实现类似的想法?

提前感谢。

您可以使用进程id和线程id的连接来唯一标识线程—例如,进程7038中的线程23可以标识为7038:23。这样做的好处是,给定线程标识符,您就可以知道线程属于哪个进程。

我怀疑一个进程控制另一个进程的线程是不可能的。您可能需要使用某种形式的进程间通信,例如RMI、命名管道或TCP。每个进程可能应该有一个线程,该线程等待传入的消息,解析消息,并根据消息的内容通知相应的线程。

一个非常简单的例子,说明基于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所说,知道你到底想要达到什么目标会很有趣。

相关内容

  • 没有找到相关文章

最新更新