2015-08-08 30 views
1

有沒有發現Java線程和POSIX線程在Linux之間的映射用Java編寫的多線程應用程序的方法嗎?映射Java線程本地並行線程

從我的研究中,有一個1:通過NPTL Java的的OpenJDK和內核線程創建的每個用戶線程之間的一一對應。假設上述內容是正確的,那麼需要做什麼才能掛鉤到JVM的本地線程委託機制以獲取每個線程的POSIX標識?

獲取每個線程的ID會檢查每個線程的親和力,在運行期間指定的採樣率,讓每線程CPU時間和上下文切換時間的動機。

雖然不是一個非常有經驗的C/C++開發者,我想最好喜歡寫這本機代碼學習之用,而不是使用更爲通用的工具比什麼是必要更寬的界面。

任何幫助,非常感謝。

+0

也許你可以確定屬於正在運行的java進程的線程。 – Tarik

+0

http://stackoverflow.com/a/1888489/1901067 – David

回答

0

Java線程編號從1n。你可以得到一組具有類似(basedo由nadeausoftware Java tip: how to list and find threads and thread groups主辦的文章)運行Thread(S)的。

static ThreadInfo[] getAllThreadInfos() { 
    final ThreadMXBean thbean = ManagementFactory.getThreadMXBean(); 
    final long[] ids = thbean.getAllThreadIds(); 

    ThreadInfo[] infos; 
    if (!thbean.isObjectMonitorUsageSupported() 
      || !thbean.isSynchronizerUsageSupported()) 
     infos = thbean.getThreadInfo(ids); 
    else 
     infos = thbean.getThreadInfo(ids, true, true); 

    final ThreadInfo[] notNulls = new ThreadInfo[infos.length]; 
    int nNotNulls = 0; 
    for (ThreadInfo info : infos) 
     if (info != null) 
      notNulls[nNotNulls++] = info; 
    if (nNotNulls == infos.length) 
     return infos; 
    return java.util.Arrays.copyOf(notNulls, nNotNulls); 
} 

public static void main(String[] args) { 
    for (ThreadInfo t : getAllThreadInfos()) { 
     System.out.printf("Thread %d, Name %s%n", t.getThreadId(), 
       t.getThreadName()); 
    } 
}