如果从线程池执行进程,则获取父线程id

时间:2017-10-24 13:37:48

标签: java multithreading executorservice

我不确定是否有可能,但无论如何我觉得值得问。 我有一个静态大小的线程池。主线程将执行大量异步作业,任何作业都可以使用CompletableFuture和静态线程池执行另一个作业。

public void doSomething()
{
    asyncCallA();
}

public void asyncCallA(){
   asyncCallB();
   asyncCallC();
}

问题:处理asyncCallC()时是否可以识别Main线程ID?

1 个答案:

答案 0 :(得分:0)

如果您提供更多代码,可能更容易提出解决方案,但有几种方法可以实现(如果我正确理解目标)

例如,您可以在线程类中引用父线程。并且当您创建新线程时传递该引用。像

这样的东西
class A extends Thread
 {
     Thread parent;
     public A(Thread parent)
     {
       this.parent=parent;
     }
 }

可能不是最好的方法,但这样你就可以引用调用你的线程了。然后你应该在同步块中访问它。这样你就可以遍历线程树的节点;)

如果你只想要主线程,你可以定义一个静态变量,因为它是静态的,所以在所有线程中都是一样的。例如在st

static AClass mainThreadObject=this; 

然后在其他线程中通过AClass .mainThreadObject

访问它