所以我有一个类,我需要知道它是否是由一个线程实例化的。现在我知道这可以通过使用StackTraceElement
并通过当前的堆栈跟踪来实现,但是我只需要知道该类是由正在运行的线程而不是父线程调用的。
示例:
我有一个管理整个应用程序的父线程,它控制其他子线程,它们执行它们被分配的任何内容以及在父线程本身上运行的类。我需要知道实例化一个类的代码是在父线程还是子线程上运行,还是只是默认的main方法。
应用:
灵活性。我正在研究的类是灵活的,因为它既是线程安全的,又可以与不太高级或非多线程的程序集成。
答案 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