- Как узнать, сколько потоков было создано и запущено?
- 5 ответов
- Ещё вопросы
- Как получить количество потоков в процессе Java
- 2. Графические средства мониторинга Java
- 3. API-интерфейсы Java
- Как получить количество потоков в процессе Java
- 2. Графические средства мониторинга Java
- 3. API-интерфейсы 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 .
Кроме того, он также показывает статистику, такую как состояния потоков, а также их продолжительность:
Мониторинг количества потоков — самая основная функция 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 .
Кроме того, он также показывает статистику, такую как состояния потоков, а также их продолжительность:
Мониторинг количества потоков — самая основная функция 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