Страницы

Поиск по вопросам

среда, 4 декабря 2019 г.

Android Thread.name

#android #многопоточность #android_threads


Я работаю с потоками в своем проекте. Среди прочих потоков, в двух разных классах
создается две HandlerThread таким вот образом:    

HandlerThread thread = new HandlerThread("ServiceThread", Process.THREAD_PRIORITY_DEFAULT);    


Дальше они стартуются: thread.start();, и я использую их луперы.
И только что я обнаружил, что они создаются с абсолютно одинаковыми именами (первый
параметр в конструкторе - имя).
Мой вопрос состоит в том, могут ли быть проблемы из за того, что у потоков одинаковые
имена? Являются ли имена какими-то идентификаторами для потоков?
    


Ответы

Ответ 1



Не будет проблем. При создании нового HandlerThread вызывается конструктор: public HandlerThread(String name, int priority) { super(name); mPriority = priority; } Идем вглубь и видим if (threadName == null) { this.name = "Thread-" + id; } else { this.name = threadName } Что и есть практическим подтверждением написанного в Javadoc: Каждый поток имеет имя в целях идентификации. Более чем один поток может иметь такое же имя . Если имя не указано , когда создается поток, новое имя генерируется для него.

Ответ 2



Нет, имена в thread не имеют никакого значения кроме удобства тестирования и логирования. Уникальным идентификатором thread будет pid.

Ответ 3



Из оффдока Every thread has a name for identification purposes. More than one thread may have the same name. If a name is not specified when a thread is created, a new name is generated for it. По идее про проблемы ничего не сказано, значит это нормально

Комментариев нет:

Отправить комментарий