Java узнать количество потоков

Как узнать, сколько потоков было создано и запущено?

Я использую 32-разрядную операционную систему Windows. Мой вопрос в том, как мы можем узнать, сколько потоков создано в программе и сколько потоков работает? Есть ли такой инструмент?

5 ответов

System.out.println( «Число активных потоков из данного потока:» + Thread.activeCount());

Обратите внимание, что activeCount() дает вам только количество потоков в локальной группе потоков , но в JVM есть несколько групп потоков.

Thread.getAllStackTraces() предоставит вам карту, в которой каждый поток является ключевым. Затем вы можете проверить состояние каждого потока и проверить thread.isAlive() .

Map threads = Thread.getAllStackTraces(); 

Вы можете получить доступ ко всей доступной информации о потоках в вашей программе, используя: http://docs.oracle.com/javase/6/docs/api/java/lang/management/ThreadMXBean.html

Если вам нужен только инструмент для этого, вы можете использовать jconsole, jvisualvm и другие инструменты профилирования, которые могут показать вам детали выполняемых потоков в gui.

Я использую этот метод, используя ThreadMXBean, если вы хотите сами потоки:

 /** * Return an array with all current threads. * @return Thread[] - array of current Threads */ 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); > /** * Get current ThreadGroup. * @see getAllThreads() * @return */ ThreadGroup getRootThreadGroup() < ThreadGroup tg = Thread.currentThread().getThreadGroup(); ThreadGroup ptg; while ((ptg=tg.getParent())!=null)< tg = ptg; >return tg; > 

Вы можете получить набор запущенных потоков из класса Thread с помощью метода getAllStackTraces() . Итерируйте этот набор и распечатайте текущий статус с помощью getState() API.

import java.util.Set; public class ThreadSet < public static void main(String args[])< SetthreadSet = Thread.getAllStackTraces().keySet(); for ( Thread t : threadSet) < System.out.println("Thread :"+t+":"+"state:"+t.getState()); >> > 

Если вы ожидаете, что только ваш поток, который вызывает main, будет указан в выводе, вы будете удивлены.

java ThreadSet Thread :Thread[Finalizer,8,system]:state:WAITING Thread :Thread[main,5,main]:state:RUNNABLE Thread :Thread[Reference Handler,10,system]:state:WAITING Thread :Thread[Signal Dispatcher,9,system]:state:RUNNABLE Thread :Thread[Attach Listener,5,system]:state:RUNNABLE 

Ещё вопросы

  • 0 MySQL: извлечение значения регулярного выражения из запроса
  • 0 session_start неисправность php
  • 0 Javascript — удаление элемента из массива
  • 1 класс Poco модели MVC, структура, имеющая данные или бизнес-уровень?
  • 1 os.read () дает OSError: [Errno 22] Недопустимый аргумент при чтении больших данных
  • 0 Как импортировать js-файл в mvc
  • 0 Инжекция $ cookies angular.js в контроллер
  • 0 Ошибка при создании нового пользователя с PHP SDK
  • 0 значение увеличения прогресса не работает с процентами
  • 0 Angularjs проблема $ http.get не работает
  • 1 Как офлайн произнести английское слово в программировании Android?
  • 0 Установка Qt — 5 для windows
  • 1 Как передать переменные из одного JSP в другой, не делая их переменными сеанса?
  • 1 ASP.NET MVC 4 передача значений между списками
  • 1 Как добавить ‘|’ Трубка в каждой ячейке в конце слова в моем листе Excel с использованием Python
  • 0 выпадающая навигация в блокноте и перенос в dw cs6, она работает в режиме реального времени, а не в любом тестовом браузере, и мои страницы не связаны
  • 0 Получение подстроки между двумя разными разделителями
  • 1 SSL — создать client.crt и client.key для Python запросов вызова
  • 0 добавление данных в таблицу из базы данных
  • 1 Игра Python Heads или Tails, не отображается, кроме пункта
  • 0 держать меню JavaScript открытым при загрузке новой страницы
  • 0 Как создать уникальную локальную переменную хранения для разных пользователей в Angularjs
  • 1 OpenCSV CSVReader UTF-8 кодировка
  • 0 Отслеживание прогресса пользователей во время отправки теста / формы
  • 1 Sporadic SqlException Class 11 Number 0 (серьезная ошибка)
  • 0 использовать DGEMM BLAS в Windows Eclipse
  • 0 Показать постоянную ссылку в поисковых системах
  • 1 Как добавить поле страницы сверху для вертикального просмотра?
  • 1 Проверка наличия объекта в трехмерном пространстве
  • 1 Как мне получить доступ к enum по int или по строке
  • 0 Выбрать и упорядочить список по другому условию (Критерии внутреннего объединения в спящий режим)
  • 1 Поместите текст внутри круга. d3.js
  • 1 Pandas applymap ошибка памяти
  • 1 Строка на дату с текущим временем
  • 1 Создать отображение из чисел в диапазон уникальных чисел
  • 1 Как я могу получить в своем API дочерний класс?
  • 0 Переменная поля формы электронной почты
  • 1 Цикл проектов в решении в MSBuild
  • 0 Учебное пособие по Google Blobstore App Engine
  • 1 Консоли Google Play 100% поэтапное развертывание не совпадают с Full Release?
  • 1 Ошибка Play Console 403 после принятия приглашения
  • 0 AngularJS — не может изменить значение поля ввода
  • 0 Linux: код ошибки для Sendmail не найден
  • 1 Ошибка: SMS API получает ошибку в приложении Android
  • 0 Скрипт для подсчета двух столбцов и результата эха
  • 0 MYSQLI — приращение запроса ГДЕ значение за прогон
  • 0 jQuery, как отключить функцию щелчка для строки при нажатии на первый элемент TD?
  • 1 Beatifulsoup не возвращает полный HTML-код страницы
  • 0 Angular js: динамические значения в виде строки в ng-модели внутри ng-repeat

Источник

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

Поток — это основная единица параллелизма в Java. В большинстве случаев пропускная способность приложения увеличивается, когда создается несколько потоков для параллельного выполнения задач.

Однако всегда есть точка насыщения. В конце концов, пропускная способность приложения зависит от ресурсов процессора и памяти. После определенного предела увеличение количества потоков может привести к переполнению памяти, переключению контекста потока и т. д.

Таким образом, хорошей отправной точкой при устранении неполадок с нехваткой памяти в приложении Java является мониторинг количества потоков. В этом руководстве мы рассмотрим некоторые способы проверки количества потоков, созданных процессом Java.

2. Графические средства мониторинга Java​

Самый простой способ увидеть количество потоков в Java — использовать графический инструмент, такой как Java VisualVM . Помимо потоков приложения, Java VisualVM также перечисляет GC или любые другие потоки, используемые приложением, такие как потоки JMX .

Кроме того, он также показывает статистику, такую как состояния потоков, а также их продолжительность:

./3cca169636224b7d96ceb87288515a47.png

Мониторинг количества потоков — самая основная функция Java VisualVM. Вообще говоря, графические инструменты более продвинуты и позволяют отслеживать приложение в реальном времени. Например, Java VisualVM позволяет нам отбирать трассировки стека ЦП и, таким образом, находить класс или метод, которые могут вызвать узкое место ЦП.

Java VisualVM распространяется вместе с установкой JDK на компьютерах с Windows. Для приложений, развернутых в Linux, нам необходимо удаленно подключиться к приложению. Для этого требуются аргументы виртуальной машины JMX .

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

3. API-интерфейсы Java​

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

В таких случаях мы полагаемся на API-интерфейсы Java, чтобы получить количество потоков. К счастью, в классе Thread есть API activeCount() : «

 public class FindNumberofThreads    public static void main(String[] args)    System.out.println("Number of threads " + Thread.activeCount());   >   > 

Источник

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

Поток — это основная единица параллелизма в Java. В большинстве случаев пропускная способность приложения увеличивается, когда создается несколько потоков для параллельного выполнения задач.

Однако всегда есть точка насыщения. В конце концов, пропускная способность приложения зависит от ресурсов процессора и памяти. После определенного предела увеличение количества потоков может привести к переполнению памяти, переключению контекста потока и т. д.

Таким образом, хорошей отправной точкой при устранении неполадок с нехваткой памяти в приложении Java является мониторинг количества потоков. В этом руководстве мы рассмотрим некоторые способы проверки количества потоков, созданных процессом Java.

2. Графические средства мониторинга Java​

Самый простой способ увидеть количество потоков в Java — использовать графический инструмент, такой как Java VisualVM . Помимо потоков приложения, Java VisualVM также перечисляет GC или любые другие потоки, используемые приложением, такие как потоки JMX .

Кроме того, он также показывает статистику, такую как состояния потоков, а также их продолжительность:

./3cca169636224b7d96ceb87288515a47.png

Мониторинг количества потоков — самая основная функция Java VisualVM. Вообще говоря, графические инструменты более продвинуты и позволяют отслеживать приложение в реальном времени. Например, Java VisualVM позволяет нам отбирать трассировки стека ЦП и, таким образом, находить класс или метод, которые могут вызвать узкое место ЦП.

Java VisualVM распространяется вместе с установкой JDK на компьютерах с Windows. Для приложений, развернутых в Linux, нам необходимо удаленно подключиться к приложению. Для этого требуются аргументы виртуальной машины JMX .

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

3. API-интерфейсы Java​

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

В таких случаях мы полагаемся на API-интерфейсы Java, чтобы получить количество потоков. К счастью, в классе Thread есть API activeCount() : «

 public class FindNumberofThreads    public static void main(String[] args)    System.out.println("Number of threads " + Thread.activeCount());   >   > 

Источник

Как узнать, сколько потоков было создано и запущено?

Я использую 32-разрядную операционную систему Windows. Мой вопрос в том, как мы можем узнать, сколько потоков создано в программе и сколько потоков работает? Есть ли такой инструмент?

System.out.println( “Число активных потоков из данного потока:” + Thread.activeCount());

Thread.getAllStackTraces() предоставит вам карту, в которой каждый поток является ключевым. Затем вы можете проверить состояние каждого потока и проверить thread.isAlive() .

Map threads = Thread.getAllStackTraces(); 

Вы можете получить доступ ко всей доступной информации о потоках в вашей программе, используя:
http://docs.oracle.com/javase/6/docs/api/java/lang/management/ThreadMXBean.html

Если вам нужен только инструмент для этого, вы можете использовать jconsole, jvisualvm и другие инструменты профилирования, которые могут показать вам детали выполняемых потоков в gui.

Я использую этот метод, используя ThreadMXBean, если вы хотите сами потоки:

 /** * Return an array with all current threads. * @return Thread[] - array of current Threads */ 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); > /** * Get current ThreadGroup. * @see getAllThreads() * @return */ ThreadGroup getRootThreadGroup() < ThreadGroup tg = Thread.currentThread().getThreadGroup(); ThreadGroup ptg; while ((ptg=tg.getParent())!=null)< tg = ptg; >return tg; > 

Вы можете получить набор запущенных потоков из класса Thread с помощью метода getAllStackTraces() . Итерируйте этот набор и распечатайте текущий статус с помощью getState() API.

import java.util.Set; public class ThreadSet < public static void main(String args[])< SetthreadSet = Thread.getAllStackTraces().keySet(); for ( Thread t : threadSet) < System.out.println("Thread :"+t+":"+"state:"+t.getState()); >> > 

Если вы ожидаете, что только ваш поток, который вызывает main, будет указан в выводе, вы будете удивлены.

java ThreadSet Thread :Thread[Finalizer,8,system]:state:WAITING Thread :Thread[main,5,main]:state:RUNNABLE Thread :Thread[Reference Handler,10,system]:state:WAITING Thread :Thread[Signal Dispatcher,9,system]:state:RUNNABLE Thread :Thread[Attach Listener,5,system]:state:RUNNABLE 

Источник

Читайте также:  Get last element of set java
Оцените статью