gpt4 book ai didi

java - 您可以分配唯一的线程 ID 并从外部程序访问线程吗?

转载 作者:行者123 更新时间:2023-11-30 05:01:04 25 4
gpt4 key购买 nike

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

想法:

  1. 有多个java进程在运行,每个进程可能有多个线程。当前的java实现是这样的,java中的线程id对于特定进程来说是唯一的,但在进程内不是唯一的。那么有没有办法可以在多个进程之间实现唯一的线程ID?

  2. 此外,我需要实现一个外部 java 程序来监视这些线程。我所说的监视是指,根据某些逻辑,我需要通知特定线程(使用唯一的线程 ID)有关事件的信息。有没有办法可以从外部程序访问线程。如果是的话怎么办?

  3. 还有其他解决方案可以实现类似的想法吗?

提前谢谢您。

最佳答案

您可以使用进程 ID 和线程 ID 的串联来唯一标识一个线程 - 例如,进程 7038 中的线程 23 可以标识为 7038:23。这样做的好处是,给定线程标识符,您可以知道该线程属于哪个进程。

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

一个基于 TCP 的解决方案的非常简单示例:每个工作进程都有一个线程,用于监听来自监视进程的 TCP 连接;预计当监控进程连接时,它会写入一行包含该工作进程中线程的id。工作进程必须保留例如将线程 ID 映射到 Thread 对象的 HashMap

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 所说,了解您实际想要实现的目标会很有趣。

关于java - 您可以分配唯一的线程 ID 并从外部程序访问线程吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6711216/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com