Ho un'applicazione Java in cui sono creati alcuni thread (tramite new Thread()
). Usando ps
Posso vedere che hanno ID di thread diversi (colonna LWP) e vorrei ottenere quegli ID dall'interno dell'applicazione Java.Ottenimento dell'ID thread per i thread Java in Linux
Nella maggior parte dei post relativi a questo argomento che ho trovato (ad es. this one), la soluzione è utilizzare ManagementFactory.getRuntimeMXBean().getName()
.
L'utilizzo di tale metodo, tuttavia, mi fornisce il PID del thread principale (anche se lo chiamo da uno dei thread), quindi non risolve il mio problema.
Esiste un modo per ottenere l'ID filo per ogni singolo Thread
creato da un'applicazione?
Sarebbe possibile utilizzare JNI per realizzarlo? Se in qualche modo potessi interfacciare con una funzione C in cui potrei chiamare syscall(__NR_gettid)
, questo potrebbe risolvere il mio problema. Non mi interessa davvero la portabilità, quindi sono assolutamente d'accordo con una soluzione che funzionerebbe solo su una macchina Linux.
UPDATE: Ho effettivamente risolto il problema utilizzando JNI. I dettagli sono spiegati nella mia risposta. Grazie a tutti per i vostri suggerimenti/commenti.
Java Discussione possono non corrispondere a un filo reale sul sistema operativo. – nhahtdh
@nhahtdh Non sono sicuro al 100% in che modo i thread Java si associano ai thread Linux, ma almeno nel mio sistema hanno un determinato ID thread come avrebbe un pthread. Come ho detto, non sto davvero cercando una soluzione portatile. – betabandido
@betabandido: Allora, hai provato a implementare quella funzione JNI?O dovremmo farlo per te? –