检测调用者并识别线程
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
所以我有一个 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