Я работаю над существующей кодовой базой Java, которая имеет объект, который расширяет Thread
, а также содержит ряд других свойств и методов, которые относятся к работе самого потока. В предыдущих версиях кодовой базы поток всегда представлял собой фактический, тяжеловесный Thread
, который начинался с Thread.start
, ожидался с Thread.join
и т. П.
В настоящее время я выполняю рефакторинг кодовой базы, и в настоящей версии функциональность Thread
объекта не всегда необходима (но сам объект, благодаря другим функциям, содержащимся в объекте; во многих случаях его можно использовать даже когда сам поток не работает). Таким образом, существуют ситуации, в которых приложение создает эти объекты (которые расширяют Thread
) и никогда не вызывает .start()
для них, просто используя их для своих других свойств и методов.
В будущем приложению может понадобиться создать гораздо больше этих объектов, чем раньше, до такой степени, что мне потенциально придется беспокоиться о производительности. Очевидно, что создание и запуск большого количества реальных потоков будет кошмаром производительности. Относится ли то же самое к Thread
объектам, которые никогда не запускаются? То есть требуются ли какие-либо ресурсы операционной системы или большие ресурсы Java исключительно для создания Thread
? Или ресурсы используются только тогда, когда Thread
фактически .start
ed, что делает незапущенные Thread
объекты безопасными для использования в количестве? Можно было бы провести рефакторинг кода, чтобы разделить функции, не связанные с многопоточностью, в отдельную функцию, но я не хочу делать большой рефакторинг, если это совершенно бессмысленно.
Я попытался определить ответ на этот вопрос с помощью нескольких поисковых запросов в Интернете, но трудно нацелить запрос, поскольку поисковые системы обычно не могут отличить объект Thread
от реального потока Java.