JavaAspectJ:如何获取线程名称?
我需要获取线程名并将它们记录在AspectJ类中。这个解决方案行不通
`@Around("call(void method*())")
public Object condition(ProceedingJoinPoint joinPoint) throws Throwable
{
PropertyConfigurator.configure("log4j.properties");
long before = System.currentTimeMillis();
Object res = joinPoint.proceed();
long diff = System.currentTimeMillis() - before;
logger.info(Thread.currentThread().getName() + "\t" + diff );
return res;
}
` 因为结果是,例如:
main 717
我的方面是一些方法。如何获取执行方法的线程的名称(不是由方面创建的线程)
# 1 楼答案
# 2 楼答案
我没有尝试重现线程情况,但我想另一种方法可能对您的情况更有用:您可以将
around
建议与介绍(也称为inter-type declarations)结合起来。声明一个成员,该成员存储要在感兴趣的Runnable
类或它们调用的类中提取的线程信息,并在日志记录建议中访问该信息编辑:您可能希望使用
ThreadLocal
存储信息。;-)编辑2:您是否尝试过使用
execution()
切入点而不是call()
切入点,以便处于执行上下文中,并且可能直接获取正在运行的线程而无需任何技巧# 3 楼答案
无论您在何处创建线程,都要按如下所示的格式设置它们的名称,否则它将给出默认的指定名称
结果:
# 4 楼答案
1首先它的不是执行方法的线程,而是执行方法的线程强>
2这里您可以做些什么来识别执行该方法的线程:
-初始化线程强>
//MyClass是分别扩展或实现Thread或Runnable的类
-命名执行线程强>
-在获取执行它的线程的方法内部强>
# 5 楼答案
对我来说,当前执行的线程是mainthread,它是currentThread。如果要转储所有线程,请使用以下命令:
然而,我仍然可能误解了“如何获得真正的线程名?”这个问题