Sobes.tech
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.