Sobes.tech
Middle+

Máte skúsenosti s semaforami pri vývoji Android aplikácií?

sobes.tech AI

Odpoveď od AI

Áno, mám skúsenosti. Semafory sa používajú na riadenie prístupu k obmedzeným zdrojom v prostredí s viacerými vláknami. Pri vývoji pre Android je to užitočné na správu paralelného prístupu k zdieľaným dátam, napríklad pri práci s databázami alebo sieťovými požiadavkami z rôznych vlákien.

Používam triedu Semaphore z balíka java.util.concurrent.

Hlavné metódy:

  • acquire(): Získa povolenie. Ak nie je dostupné, vlákno sa zablokuje.
  • release(): Uvoľní povolenie a zvýši dostupné množstvo.

Príklad použitia na obmedzenie paralelného prístupu k zdroju:

import java.util.concurrent.Semaphore;

// Deklarujeme semaphore s 2 povoleniami
private final Semaphore resourceSemaphore = new Semaphore(2);

public void accessResource(int threadId) {
    try {
        // Získať povolenie, blokuje ak je limit dosiahnutý
        resourceSemaphore.acquire();
        System.out.println("Vlákno " + threadId + " získalo prístup ku zdroju.");

        // Simulácia práce so zdrojom
        Thread.sleep(1000);

    } catch (InterruptedException e) {
        e.printStackTrace();
    } finally {
        // Uvoľniť povolenie
        resourceSemaphore.release();
        System.out.println("Vlákno " + threadId + " uvoľnilo zdroj.");
    }
}

Semafory umožňujú efektívne riadenie poolov zdrojov a predchádzanie podmienkam súťaže. Je dôležité starostlivo plánovať počet povolení a správne spracovávať ich získavanie a uvoľňovanie, aby sa predišlo vzájomným zámkom.