Потоки
В Android и Java поток (или нить, от англ. thread) — это независимая последовательность выполнения команд внутри программы. Потоки позволяют выполнять несколько задач одновременно (параллельно), что полезно для улучшения производительности и отклика приложения, особенно когда нужно выполнять длительные операции, такие как сетевые запросы или обработка данных, не блокируя основной (главный) поток пользовательского интерфейса.
import kotlin.concurrent.thread
fun main() {
val thread = thread(start = true) {
println("Этот код выполняется в другом потоке")
}
thread.join() // Ожидание завершения потока
println("Этот код выполняется в основном потоке")
}
Процессор играет ключевую роль в выполнении потоков. Он отвечает за назначение времени процессора различным потокам. Потоки могут выполняться параллельно на разных ядрах процессора или с использованием механизмов переключения контекста. Многопоточность позволяет эффективно использовать ресурсы процессора, особенно на многоядерных системах.
Процессоры в Android устройствах могут быть одноядерными или многоядерными, и, как правило, многие из них могут выполнять несколько потоков одновременно. Это означает, что приложения на Android могут использовать многопоточность для улучшения производительности и отзывчивости.
Android имеет особенности в управлении потоками из-за своей асинхронной модели UI. Например, все операции взаимодействия с пользовательским интерфейсом (UI) должны выполняться в основном потоке (также известном как UI поток или главный поток). Это необходимо для предотвращения блокировки пользовательского интерфейса и обеспечения отзывчивости приложения.
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
// Код, выполняемый в потоке
}
});
thread.start();
Runnable
Runnable runnable = new Runnable() {
@Override
public void run() {
// Код, выполняемый в потоке
}
};
Thread thread = new Thread(runnable);
thread.start();
ExecutorService executorService = Executors.newSingleThreadExecutor();
executorService.execute(new Runnable() {
@Override
public void run() {
// Код, выполняемый в потоке
}
});
executorService.shutdown();