Middle+
Tem experiência com semáforos no desenvolvimento de aplicações Android?
sobes.tech IA
Resposta da IA
Sim, tenho experiência. Os semáforos são utilizados para controlar o acesso a recursos limitados em ambientes multithread. No desenvolvimento Android, isso é útil para gerir o acesso paralelo a dados partilhados, por exemplo, ao trabalhar com bases de dados ou pedidos de rede de diferentes threads.
Utilizo a classe Semaphore do pacote java.util.concurrent.
Principais métodos:
acquire(): Adquire a permissão. Se não houver disponíveis, o thread fica bloqueado.release(): Liberta a permissão, aumentando o número disponível.
Exemplo de uso para limitar o acesso paralelo a um recurso:
import java.util.concurrent.Semaphore;
// Declarar um semáforo com 2 permissões
private final Semaphore resourceSemaphore = new Semaphore(2);
public void accessResource(int threadId) {
try {
// Adquire a permissão, bloqueando se o limite for atingido
resourceSemaphore.acquire();
System.out.println("Thread " + threadId + " obteve acesso ao recurso.");
// Simulação de trabalho com o recurso
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
// Liberta a permissão
resourceSemaphore.release();
System.out.println("Thread " + threadId + " libertou o recurso.");
}
}
Os semáforos permitem gerir eficazmente pools de recursos e evitar condições de corrida. É importante planear cuidadosamente o número de permissões e tratar corretamente a aquisição e libertação para evitar bloqueios mútuos.