检测调用者并识别线程

时间:2015-10-17 19:21:30

标签: java multithreading thread-safety stack-trace

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

示例:

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

应用:

灵活性。我正在研究的类是灵活的,因为它既是线程安全的,又可以与不太高级或非多线程的程序集成。

1 个答案:

答案 0 :(得分:1)

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

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

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

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

修改类构造函数。

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

现在每次创建一个实例时,将其打印到stdout(或者你的情况下的记录器)

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