2015-10-17 71 views
0

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

例子:

我有一个管理整个应用程序的父线程和它控制的其他子线程做任何事是被父运行的类线程本身,他们被分配为好。我需要知道实例化一个类的代码是在/正在父线程还是子线程上运行,还是只是默认的主方法。

应用:

灵活性。我正在开发的这个类被设计为灵活的,因为它既是线程安全的,又可以与更低级的或非多线程的程序集成。

+0

但是,任何类都可以由一个线程被实例化,然后切换到另一个或几个人。 – RealSkeptic

+0

是的,但我需要知道具体是否一个类由线程实例化,而不是如果它是由在主线程上运行的类实例化的,或者不是在另一个线程上运行的子线程本身的类。 – Matthewacon

回答

1

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

只是为了快速插图,我会给你一些代码在斯卡拉:

这是你如何能得到当前线程。

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 = [email protected]