Java 您能分配唯一的线程ID并从外部程序访问线程吗?

Java 您能分配唯一的线程ID并从外部程序访问线程吗?,java,multithreading,threadpool,Java,Multithreading,Threadpool,我目前正在执行一个程序,需要我处理线程和进程 创意: 有多个java进程正在运行,每个进程可能有多个线程。 当前的java实现是这样的:java中的线程ID对于特定进程是唯一的,但不在进程内。那么,有没有一种方法可以在多个进程之间实现唯一的线程ID呢 另外,我需要实现一个外部java程序来监视这些线程。通过监视,我的意思是,根据一些逻辑,我需要通知一个特定的线程(使用唯一的线程id)关于一个事件。是否有一种方法可以从外部程序访问线程。如果是,怎么做 有没有其他解决方案来实现类似的想法 提前感谢。

我目前正在执行一个程序,需要我处理线程和进程

创意:

  • 有多个java进程正在运行,每个进程可能有多个线程。 当前的java实现是这样的:java中的线程ID对于特定进程是唯一的,但不在进程内。那么,有没有一种方法可以在多个进程之间实现唯一的线程ID呢

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

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


  • 提前感谢。

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

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

    一个非常简单的基于TCP的解决方案的示例:每个工作进程都有一个线程,用于侦听来自监视进程的TCP连接;当监控进程连接时,它将写入一行,其中包含此工作进程中线程的id。辅助进程必须保留一个映射线程ID到
    线程
    对象的
    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所说,了解你真正想要实现的目标是很有趣的。

    我认为你的意思是“在特定的过程中是独一无二的,而不是在不同的过程中”。如果你描述你想要解决的问题,而不是你的解决方案,你会得到更好的答案。我看不出有什么好的理由让你把一个真实的线程暴露给外界。相反,我将公开线程将访问的内容(例如,一个包含线程要读取的标志的JMXbean)。@aasmumnd no…我的意思是,我需要在整个应用程序的所有进程实例中,线程ID都具有唯一性@parsifal我相信这是我所需要的,因为它是一个更大的应用程序的一部分。这是一个较大案例中的一个小模块。@prap19:我提到了您描述Java实际做什么的句子(即在进程之间没有唯一的线程ID)-我理解您需要Java没有提供的东西,即跨进程的唯一线程ID。:-)你能详细解释一下吗?@prap19:哪一部分?(什么样的精化——有什么你不明白的,或者你想要代码?)你提到了RMI,命名管道和TCP。所以你能解释一下其中的一种方法吗,我可以把它和我的问题联系起来。谢谢你的解释,这是可以理解的。但这意味着每个进程将侦听不同的唯一端口,这可能是可伸缩性方面的一个问题。如何使用类似的TCP实现来解决这个问题?@prap19:您希望有多少这样的进程?我假设一台现代机器可以毫无问题地处理数千个TCP侦听器(不过这只是一个猜测;我实际上还没有尝试过)。