@UIThread
будет генерироваться метод, который использует Handler
для выполнения кода, как это:
private Handler handler_ = new Handler();
public void bar() {
handler_.post(new Runnable() {
...
}
}
Если присмотреться к Handler's javadoc, мы можем увидеть этот пункт:
Обработчик позволяет отправлять и обрабатывать объекты Message и Runnable, связанные с MessageQueue потока. Каждый экземпляр Handler связан с одним потоком и очередью сообщений этого потока. Когда вы создаете нового обработчика, он привязан к очереди потоков/сообщений потока, который его создает - с этой точки он будет доставлять сообщения и исполняемые файлы в очередь сообщений и выполнять их по мере их выхода из сообщения очередь.
Обработчик создается во время создания экземпляра класса, поэтому он будет связан с основной нитью. И поскольку каждый вызов аннотированного метода @UIThread
будет привязан к этому обработчику, каждый метод будет выполняться один за другим.
Поэтому у вас не должно быть условий гонки в этих методах. И поскольку эти методы будут выполняться в основном потоке, вы должны выполнять только обработку пользовательского интерфейса.
Надеюсь, я отвечу на все ваши вопросы.