Middle+
Máte zkušenosti s semafory při vývoji Android aplikací?
sobes.tech AI
Odpověď od AI
Ano, mám zkušenosti. Semafory se používají k řízení přístupu ke omezeným zdrojům v prostředí s více vlákny. V vývoji pro Android je to užitečné pro správu paralelního přístupu ke sdíleným datům, například při práci s databázemi nebo síťovými požadavky z různých vláken.
Používám třídu Semaphore z balíčku java.util.concurrent.
Hlavní metody:
acquire(): Získá povolení. Pokud není dostupné, vlákno se zablokuje.release(): Uvolní povolení a zvýší dostupné množství.
Příklad použití k omezení paralelního přístupu ke zdroji:
import java.util.concurrent.Semaphore;
// Deklarace semaforu se 2 povoleními
private final Semaphore resourceSemaphore = new Semaphore(2);
public void accessResource(int threadId) {
try {
// Získání povolení, blokování pokud je limit dosažen
resourceSemaphore.acquire();
System.out.println("Vlákno " + threadId + " získalo přístup ke zdroji.");
// Simulace práce se zdrojem
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
// Uvolnění povolení
resourceSemaphore.release();
System.out.println("Vlákno " + threadId + " uvolnilo zdroj.");
}
}
Semafory umožňují efektivní správu poolů zdrojů a předcházejí závodním podmínkám. Je důležité pečlivě plánovat počet povolení a správně zacházet s jejich získáváním a uvolňováním, aby se předešlo vzájemným zámkům.