检测调用者并识别线程

Detecting caller and identifying threads

所以我有一个 class,我需要知道它是否由线程实例化。现在我知道这可以通过使用 StackTraceElement 并通过当前堆栈跟踪来实现,但是我只需要知道 class 是否由 运行 线程而不是父线程调用.

示例:

我有一个管理整个应用程序的父线程,它控制其他子线程执行分配给它们的任何事情,以及 运行 在父线程上的 classes本身。我需要知道实例化 class 的代码是/是父线程或子线程上的 运行,还是只是默认的主方法。

申请:

灵活性。我正在开发的 class(es) 设计得非常灵活,因为它既是线程安全的,又可以与不太高级或非多线程的程序集成。

修改 class(es) 的构造函数以打印当前线程。将线程详细信息添加到记录器中,然后您可以过滤掉哪些实例不是使用您的 main 线程创建的。

为了快速说明,我会给你一些 Scala 代码:

这是获取当前线程的方法。

scala> Thread.currentThread
res23: Thread = Thread[main,5,main]

修改class构造函数。

scala> class A{ println(Thread.currentThread) }
defined class A

现在每次创建实例时,将其打印到标准输出(或您的情况下的记录器)

scala> new A
Thread[main,5,main]
res24: A = A@5e99b9c