Как проверить количество запущенных потоков в 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 вы получите счетчик системных потоков, если они активны.
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