получение всех запущенных потоков в JVM

Я хочу запустить другой файл jar и получить его потоки, поэтому я подумал, что запуск jar таким образом запустит jar на текущей JVM:

Process p = Runtime.getRuntime().exec("java -jar " + path);

И затем, чтобы получить потоки, как это:

ThreadGroup rootThreadGroup = null;

ThreadGroup getRootThreadGroup( ) {
    if ( rootThreadGroup != null )
        return rootThreadGroup;
    ThreadGroup tg = Thread.currentThread( ).getThreadGroup( );
    ThreadGroup ptg;
    while ( (ptg = tg.getParent( )) != null )
        tg = ptg;
    return tg;
}

Thread[] getAllThreads( ) {
    final ThreadGroup root = getRootThreadGroup( );
    final ThreadMXBean thbean = ManagementFactory.getThreadMXBean( );
    int nAlloc = thbean.getThreadCount( );
    int n = 0;
    Thread[] threads;
    do {
        nAlloc *= 2;
        threads = new Thread[ nAlloc ];
        n = root.enumerate( threads, true );
    } while ( n == nAlloc );
    return java.util.Arrays.copyOf( threads, n );
}

Но он не показывает новые потоки jar, которые я запускал раньше, хотя я поставил строку Thread.sleep(4000); немного подождать.
Разве это не предполагает, что все потоки будут работать в JVM?
источник кода


person Tarek    schedule 09.05.2015    source источник
comment
Выполняется ли код, который вы вставили во вторую группу кода, в отдельном процессе? Если это так, вы не увидите другие потоки процессов. Чтобы получить потоки, если вы работаете в том же экземпляре jvm, см.: stackoverflow.com/questions/1323408/ Или, если вы находитесь вне процесса, вы можете сделать что-то вроде: stackoverflow.com/questions/407612/   -  person Grady G Cooper    schedule 09.05.2015
comment
Я думал, что запуск jar таким образом запустит jar на текущей JVM. Нет, запуск jar таким образом запустит его в новой JVM, а не в текущей.   -  person Erwin Bolwidt    schedule 09.05.2015
comment
Runtime.exec вызывает команду в базовой операционной системе, а не в текущей JVM.   -  person redge    schedule 09.05.2015
comment
@GradyGCooper Я хочу сделать это в связи с тем, что у каждого процесса есть свои потоки.   -  person Tarek    schedule 09.05.2015
comment
@ErwinBolwidt хорошо, это новинка. Я думаю, что мне нужно больше искать способ запустить его на текущей JVM. Если знаете как подскажите пожалуйста.   -  person Tarek    schedule 09.05.2015
comment
@redge, но в конце концов он работает на какой-то JVM, я думал, что есть одна JVM, которая запускает все файлы jar. Но, похоже, это было неправильно. Не могли бы вы дать несколько советов, чтобы запустить его правильно? Под правильно я подразумеваю ту же JVM.   -  person Tarek    schedule 09.05.2015
comment
См. раздел stackoverflow.com/questions/18394560/   -  person Grady G Cooper    schedule 09.05.2015
comment
Сделайте метод общедоступным, добавьте банку в свой путь к классам и вызовите его напрямую.   -  person redge    schedule 09.05.2015