Java count all threads

Как проверить количество запущенных потоков в Java?

Я новичок в работе с многопоточностью. У меня есть Java-программа, которая использует пул потоков размером 10. Во время работы программы, как я могу проверить, сколько потоков в данный момент выполняется моей программой? Мне нужен способ сделать это через окна, а также через саму программу, распечатав количество запущенных в данный момент потоков.

5 ответов

Это даст вам общее количество потоков в вашей виртуальной машине:

int nbThreads = Thread.getAllStackTraces().keySet().size(); 

Теперь, если вы хотите, чтобы все потоки выполнялись в настоящий момент, вы можете сделать это:

int nbRunning = 0; for (Thread t : Thread.getAllStackTraces().keySet())

Здесь перечислены возможные состояния: Thread.State javadoc

Если вы хотите видеть текущие потоки не программными, но с помощью инструмента Windows, вы можете использовать Process Explorer.

Вы можете получить все потоки и трассировки стека в JVM, используя Thread.getAllStackTraces()

В ответ на ваш следующий комментарий

В следующем фрагменте кода: while (resultSet.next()) < Имя = resultSet.getString( "hName" ); MyRunnable worker = new MyRunnable (hName); threadExecutor.execute(рабочий); >. Моя тема пул имеет размер 10. Мне нужно убедиться, что моя программа работает правильно с многопоточными и хотите проверить, сколько потоков работает в определенный момент. Как я могу это сделать?

к другому ответу, я предлагаю вам профилировать свой код с помощью JVisualVM и проверить, работает ли ваш пул потоков так, как должен. Причина этого предположения заключается в том, что тогда вам не нужно беспокоиться обо всех других проблемах с домохозяйством, которыми управляет JVM. Кроме того, что вы хотите сделать, это то, для чего нужны инструменты, такие как JVisualVM.

Если вы новичок в профилировании Java-программ, JVisualVM позволяет вам видеть, что происходит под капотом, когда вы используете свой код. Вы можете увидеть активность кучи, GC, проверить потоки, выполняемые/ожидающие выборки/профиля, вашего процессора или использования памяти. Существует немало плагинов.

import java.util.Set; import java.lang.Thread.State; public class ActiveThreads < 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 threadSet = Thread.getAllStackTraces().keySet(); for ( Thread t : threadSet) < if ( t.getThreadGroup() == Thread.currentThread().getThreadGroup() && t.getState() == Thread.State.RUNNABLE)< 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(); >> > 
Thread :Thread[main,5,main]:state:RUNNABLE Thread count started by Main thread:1 

Thread.getAllStackTraces().keySet() предоставляет вам список всех потоков, которые были запущены обоими Program and System . В отсутствии условия ThreadeGroup вы получите счетчик системных потоков, если они активны.

Читайте также:  Php memory limit console

Reference Handler, Signal Dispatcher,Attach Listener and Finalizer

Там должен быть счетчик производительности для процесса, который может вам это сказать.

Возвращает оценку количества активных потоков в текущей группе потоков потоков и ее подгруппах. Рекурсивно выполняет итерацию по всем подгруппам в текущей группе потоков потоков.

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

Возвращает родительский элемент этой группы потоков.

Во-первых, если родительский элемент не равен null, метод checkAccess родительской группы потоков вызывается без аргументов; это может привести к исключению безопасности.

Все из них, кажется, предлагают что-то вроде:

int activeThreadTotalEstimate() < ThreadGroup group; ThreadGroup parent; group = Thread.currentThread().getThreadGroup(); while ((parent = group.getParent()) != null) < group = parent; >return group.activeCount(); > 

Ещё вопросы

  • 0 как отфильтровать данные по атрибуту объекта в ng-repeat angularjs
  • 0 Кеширование с JSP и HTML5: как отключить кеширование на стороне сервера
  • 1 Магистральная Марионетка не стреляет маршрутами
  • 1 jaxb — отношения многие ко многим
  • 0 Chrome и Opera удаляют данные записи при редактировании записи
  • 1 Мобильный сервис Azure с .NET Backend получает исключение
  • 1 Строки с одинаковым содержимым не равны?
  • 1 Форматировать строку даты в JavaScript
  • 0 Как перенаправить пользователя на страницу с ошибкой из контроля входа при вводе неверного имени пользователя и / или пароля?
  • 1 NodeJS Websockets — завершить сокет после отправки данных
  • 1 Дополнительный набор баров на участке в Pandas?
  • 0 Не удается получить .focus () для фокусировки на входе с идентификатором в Chrome, Safari и FF
  • 0 c ++ getaddrinfo не обрабатывает большие URL
  • 0 Как я могу получить конкретный текст с веб-страницы
  • 1 Установка пустого значения для ввода текста
  • 0 PHP использует fopen для загрузки TXT-файла через URL. Как ограничить сумму для скачивания?
  • 1 как отключить кнопку на основе результата функции JavaScript
  • 1 Реструктуризация разбора результатов анализа многопоточного файла журнала
  • 0 Как может angularjs контроллер доступа к функциям в non-angularjs iframe?
  • 0 Как показать элемент из массива json один за другим в Angular JS
  • 0 Инициализировать не копируемый сторонний базовый класс с указателем на объект
  • 0 CSV поле соответствия в где
  • 1 Как получить разные цвета для разных диапазонов значений в простых линейных графиках Google?
  • 0 Несколько экземпляров свойства перехода среди классов, используемых в одном элементе
  • 1 Как сохранить данные в локальном хранилище, прежде чем покинуть страницу на устройствах IOS?
  • 0 JQuery, как взять ссылку на дочерний элемент и использовать его где-нибудь еще
  • 0 Laravel пытается проверить, есть ли у пользователя связь с постом.
  • 1 Instagram в реальном времени OAuthParameterException: отсутствует параметр client_id или URL-адреса access_token. в запросе
  • 0 Как открыть вторичную ссылку IFRAME на Первичную ссылку IFRAME?
  • 1 Прочитать тег NFC от Xamarin
  • 1 Невозможно отправить настраиваемое поле, которое расширяет представление данных
  • 1 Разделить текст из строки Java
  • 0 Проверка имени пользователя удаленной проверки JQuery
  • 1 Не удается подключиться к одноузловому серверу Kafka через Docker
  • 0 У меня ошибка LNK2019: нерешенная внешняя ошибка символа (небольшой код для просмотра)
  • 1 WebView не работает с net :: ERR_CACHE_READ_FAILURE
  • 0 API для запроса REST от NodeJS к бэкэнду
  • 1 Визуализация данных: рисование появления значения в сетке
  • 0 Доступ к HTML внутри холста
  • 1 Свободный оптимистичный замок NHibernate и ленивая нагрузка
  • 1 Прогнозирование отсутствия активности клиентов
  • 0 Bash echo-pipe в оболочке Mysql не работает
  • 0 Алгоритм моделирования средних
  • 0 `ngAnimate` — проблема интеграции
  • 0 MySQL не запускается в панели управления Xampp в Windows 8.1
  • 1 Можно ли запустить код сценария c # до запуска приложения в Unity
  • 0 angularjs: проверить длину фильтра в повтор
  • 1 Панды: конвертировать дату ‘объект’ в int
  • 0 Div открывается вертикально, когда страница загружается с помощью JavaScript и CSS
  • 0 Сайт Parallax — исправление фоновых изображений для мобильного телефона Interent Explorer 10
Читайте также:  Curl php посмотреть запрос

Источник

Оцените статью