Создание потоков в синглтоне - PullRequest
0 голосов
/ 14 декабря 2011

У меня есть одноэлементный класс, который используется некоторыми потоками.

внутри метода этого одноэлементного файла. Я хочу создать другой поток для выполнения какой-либо работы (поэтому любой поток, использующий этот одноэлементный файл, может запустить дополнительный потокjob)

Прямо сейчас я запускаю потоки простым способом:

mSThread = new Thread(job that implements Runnable);
mSThread.start();

Поток mSThread объявлен членом класса, я не думаю, что мне нужно сохранять ссылки на потоки, чтобы онХорошо, что каждый раз, когда создается новый поток, ссылка будет потеряна

Можно ли делать то, что я делал, или мне следует использовать другую технику, такую ​​как пул потоков?

Ответы [ 4 ]

3 голосов
/ 14 декабря 2011

Нет необходимости хранить ссылку на объект потока, поэтому, если она вам больше не нужна, вам не нужно хранить ее в переменной-члене;вы можете просто запустить поток и забыть ссылку.

Нужно ли использовать пул потоков, зависит от того, что именно делает ваше приложение, как часто вы ожидаете запуска новых потоков и т. д .;без дополнительной информации трудно сказать, стоит ли это того или нет.Если вы сделаете это, вы захотите использовать классы из пакета java.util.concurrent.Используя ExecutorService, вы можете запускать фоновые задачи в пуле потоков.

1 голос
/ 15 декабря 2011

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

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

Чтобы предотвратить такие случаи, вы можете рассмотреть возможность использования пула потоков - это предотвращает случайное неправильное использование в будущем - особенно с тех пор, как Sun / Oracle предоставила потрясающий пакет java.util.concurrent, который абстрагирует большинство грязных деталей.

0 голосов
/ 14 декабря 2011

Поток mSThread объявлен членом класса,

Вы имеете в виду, что это переменная экземпляра синглтона? Если это так, у вас могут быть проблемы. Лучше сделать его локальной переменной.

0 голосов
/ 14 декабря 2011

На мой взгляд, все в порядке.

С чем вы действительно сталкиваетесь, возможно, является преждевременным вопросом оптимизации.Как часто будут создаваться темы?Будет ли ваше приложение когда-нибудь достаточно загруженным, чтобы это стало проблемой?На вашей целевой платформе сколько ресурсов и времени требуется для создания нового потока, и это приемлемо?

Еще один вопрос: хотите ли вы отслеживать количество потоков, созданных для целей управления (JMX)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...