Подтвердить что ты не робот

Как получить количество потоков в Java-процессе

Как я могу увидеть количество потоков в процессе Java?

4b9b3361

Ответ 1

Полезный инструмент для отладки java-программ, он дает количество потоков и другую соответствующую информацию на них:

jconsole <process-id>

Ответ 4

В классе Thread есть статический метод, который будет возвращать количество активных потоков, управляемых JVM:

Thread.activeCount()

Возвращает количество активных потоков в текущей группе потоков потоков.

Кроме того, внешние отладчики должны отображать все активные потоки (и позволяют вам приостановить их количество), если вы хотите контролировать их в режиме реального времени.

Ответ 5

Я написал программу для итерации всех Threads созданных и распечатанных getState() для каждого Thread

import java.util.Set;

public class ThreadStatus {
    public static void main(String args[]) throws Exception{
        for ( int i=0; i< 5; i++){
            Thread t = new Thread(new MyThread());
            t.setName("MyThread:"+i);
            t.start();
        }
        int threadCount = 0;
        Set<Thread> threadSet = Thread.getAllStackTraces().keySet();
        for ( Thread t : threadSet){
            if ( t.getThreadGroup() == Thread.currentThread().getThreadGroup()){
                System.out.println("Thread :"+t+":"+"state:"+t.getState());
                ++threadCount;
            }
        }
        System.out.println("Thread count started by Main thread:"+threadCount);
    }
}

class MyThread implements Runnable{
    public void run(){
        try{
            Thread.sleep(2000);
        }catch(Exception err){
            err.printStackTrace();
        }
    }
}

Вывод:

java ThreadStatus

Thread :Thread[MyThread:0,5,main]:state:TIMED_WAITING
Thread :Thread[main,5,main]:state:RUNNABLE
Thread :Thread[MyThread:1,5,main]:state:TIMED_WAITING
Thread :Thread[MyThread:4,5,main]:state:TIMED_WAITING
Thread :Thread[MyThread:2,5,main]:state:TIMED_WAITING
Thread :Thread[MyThread:3,5,main]:state:TIMED_WAITING
Thread count started by Main thread:6

Если вы удалите условие ниже

if ( t.getThreadGroup() == Thread.currentThread().getThreadGroup())

Вы также получите ниже потоков в выводах, которые были запущены системой.

Reference Handler, Signal Dispatcher,Attach Listener and Finalizer.

Ответ 6

    public class MainClass {

        public static void main(String args[]) {

          Thread t = Thread.currentThread();
          t.setName("My Thread");

          t.setPriority(1);

          System.out.println("current thread: " + t);

          int active = Thread.activeCount();
          System.out.println("currently active threads: " + active);
          Thread all[] = new Thread[active];
          Thread.enumerate(all);

          for (int i = 0; i < active; i++) {
             System.out.println(i + ": " + all[i]);
          }
       }
   }

Ответ 7

Общее решение, для которого не требуется GUI, например jconsole (не работает на удаленных терминалах), ps работает для процессов, отличных от java, не требует установки JVM.

ps -o nlwp <pid>

Ответ 8

Использование команды Linux Top

top -H -p (process id)

вы можете получить идентификатор процесса одной программы с помощью этого метода:

ps aux | grep (your program name)

например:

ps aux | grep user.py