如何在Java中使用AspectJ记录父级和子级的线程ID

时间:2018-10-28 08:37:49

标签: java aop aspectj

我是AspectJ的新手。能够创建一个简单的JUnit和Aspect类来记录ThreadId,后者记录父线程ID。但是我不知道如何记录子级ThreadId。

给出以下代码段,我想使用AspectJ记录父级和子级的线程ID。

JUnit:

lamTut::stringLength

方面:以下方面记录父ThreadId。

@Test
public void testExecutorService() {
    ExecutorService service = Executors.newSingleThreadExecutor();
    Runnable task = new Runnable() {
        @Override
        public void run() {
            System.out.println("working on the task");
        }
    };
    service.submit(task);
}

我了解它在这里使用“之前”建议,并且它正在拦截Submit方法,这也可能是一个问题。 如何使用正确的Pointcut表达式记录子线程ID和父线程ID?谢谢。

1 个答案:

答案 0 :(得分:0)

您可以做的是拦截提交的任务参数,并增强该任务以打印所需的内容:

ArrayIndexOutOfBoundsException

一旦异步任务被执行,执行它的线程的ID将被打印。