2015-10-17 69 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]