Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JAVA:如何设置线程名(RMI)?_Java_Multithreading_Distributed - Fatal编程技术网

JAVA:如何设置线程名(RMI)?

JAVA:如何设置线程名(RMI)?,java,multithreading,distributed,Java,Multithreading,Distributed,经过研究和讨论,我决定需要为分布式系统中属于同一控制流的不同JVM上的线程设置相同的名称。线程由RMI等创建。以这种方式创建线程时是否可以设置名称?thread类有一个静态方法setName(String)。如果你能让你的线程,不管它们来自哪里,运行这个方法,你应该很乐意去做。与Tomcat相关的线程也存在类似问题。没有自动方法将此信息从客户端传输到服务器 听起来您希望/需要在客户机上设置某种上下文对象(每个线程?),并将其作为方法参数传递给RMI服务器。该Context对象不仅可以包含线程名称

经过研究和讨论,我决定需要为分布式系统中属于同一控制流的不同JVM上的线程设置相同的名称。线程由RMI等创建。以这种方式创建线程时是否可以设置名称?

thread类有一个静态方法
setName(String)
。如果你能让你的线程,不管它们来自哪里,运行这个方法,你应该很乐意去做。与Tomcat相关的线程也存在类似问题。

没有自动方法将此信息从客户端传输到服务器

听起来您希望/需要在客户机上设置某种
上下文
对象(每个线程?),并将其作为方法参数传递给RMI服务器。该
Context
对象不仅可以包含线程名称,还可能包含调用进程pid等其他信息

然后,您必须使用该
上下文
对象,通过
thread.setName()
将线程名称等相应地传递到导线上。接下来,您可以使用此工具在日志框架中设置特定于上下文的信息(例如,使用Log4j)


使用方面进一步自动化这一点留给读者进一步练习:-)

感谢链接。我的问题更多的是在JVM之间传递名称,而不在对象中添加字段,也不向与RMI连接的every方法添加参数,但我需要更仔细地研究此链接。它不是静态方法。显然,我对log4j和mdc/ndc做了很多研究,但不幸的是它无法检测分布式线程。我的问题是:如何为每个请求设置一个唯一的名称,通过控制流传递它,然后使用log4j将这个名称添加到日志中,最终将它们聚集在一起,并按请求名称分组。是的。无论您选择何种解决方案,都必须在服务器(接收)端进行一些工作。您可以使用方面(AspectJ或类似工具)自动完成这项工作,但这是另一个问题!实际上,我也做了关于AspectJ的研究:)我的想法是在
方面添加登录,因为我需要测量执行时间。那么,是否可以使用方面设置线程名称(一个名称用于连接到一个请求的所有线程)?如何传递这个名字?我会让你再次参考上面的答案。我想它包含了你所需要的一切