我不确定是否有可能,但无论如何我觉得值得问。 我有一个静态大小的线程池。主线程将执行大量异步作业,任何作业都可以使用CompletableFuture和静态线程池执行另一个作业。
public void doSomething()
{
asyncCallA();
}
public void asyncCallA(){
asyncCallB();
asyncCallC();
}
问题:处理asyncCallC()时是否可以识别Main
线程ID?
答案 0 :(得分:0)
如果您提供更多代码,可能更容易提出解决方案,但有几种方法可以实现(如果我正确理解目标)
例如,您可以在线程类中引用父线程。并且当您创建新线程时传递该引用。像
这样的东西class A extends Thread
{
Thread parent;
public A(Thread parent)
{
this.parent=parent;
}
}
可能不是最好的方法,但这样你就可以引用调用你的线程了。然后你应该在同步块中访问它。这样你就可以遍历线程树的节点;)
如果你只想要主线程,你可以定义一个静态变量,因为它是静态的,所以在所有线程中都是一样的。例如在st
中static AClass mainThreadObject=this;
然后在其他线程中通过AClass .mainThreadObject
访问它