WebHU - Programozási kérdések és válaszok

A globális változóknak továbbra is volatilisnak kell lenniük, ha az őket elérő metódusok szinkronizáltak/zárolást hajtanak végre?

Igyekeztem többet megtudni a szálak biztonságáról, és próbáltam a jó gyakorlatokra gondolni a szálbiztonsági kód implementálásakor. A token lekérésével összefüggésben szeretném nyomon követni az aktuális időt, és azt az időpontot, amikor a token lejár (felezve, így a token lejárta előtt frissítek). Íme néhány pszeudo kód arra a helyzetre, amelyen gondolkodom

long renewTime = 0; //should this be a volatile long?
Lock lock = new Lock
Service someService = new Service();

public void authenticateWithSomeService() {
    try {
        lock.get()
        //...call to login with someService
        renewTime = System.currentTimeMillis() + someService.getToken.getExpirationTime/2
    catch (Exception e) {
        //log or rethrow
    } finally {
        lock.unlock();
    }
}

private void refreshToken() {
    if(System.currentTimeMillis() > renewTime) {
        //...call to renew token with someService
        long newTime = someService.getToken.getExpirationTime/2
        renewTime = System.currentTimeMillis() + newTime;
    }
}

public synchronized String getStuff() {
    refreshToken(); //check if token needs to be refreshed
    try {
        //...some HTTP call to get an item with the service
    } catch (Exception e) {
        //log or rethrow
    }
}

Tehát egy ilyen forgatókönyv esetén garantált-e, hogy a renewTime-t mindig csak egy szál fogja olvasni/írni, mivel 1. a hitelesítési módszer zárakat használ, és 2. a getStuff metódus, amely a renewTime-t olvassa és írja, szinkronizálva van? Biztonságos ez a szál, vagy a renewTime-nek illékonynak kell lennie, hogy a szálak ugyanazt az értéket érjék el?

02.04.2020

  • azt javaslom, olvass utána a szemaforokról és a mutexről. itt van egy jó cikk.. baeldung.com/java-mutex szükség van egy zárra mechanizmus, az adatok zárolásához. mint például egy szemafortömb. GL.HC; 03.04.2020
  • Nem, ez nem biztonságos. volatile hozzá kell adnia legalább a renewTime-hoz. A Java szinkronizálást igényel mind az olvasás, mind az írás során, mivel a renewTime szöveget szinkronizálás nélkül olvassa el, ez nem biztonságos. 03.04.2020
  • Ez választ ad a kérdésedre? Java: Biztonságosan hozzáférhet-e két szál ugyanahhoz a módszerhez, ha a hozzáférés csak olvasható 03.04.2020
  • A longok szótépésre is ki vannak téve, ha 32 bites gépen futnak anélkül, hogy szinkronizálnák őket. Kérjük, olvassa el a specifikációt, ez választ ad a legtöbb kérdésére. 03.04.2020

Új anyagok

A rádiógomb ellenőrzött eseményének használata a jQueryben
Ebben a cikkben látni fogjuk, hogyan kell dolgozni a jquery választógombbal ellenőrzött eseményeivel. A választógombok HTML gombok, amelyek segítenek kiválasztani egyetlen értéket egy csoportból...

Körkörös függőségek megoldása terraformban adatforrásokkal – lépésről lépésre
Mi az a körkörös függőségek Dolgozzunk egy egyszerű eseten, amikor az SQS-sor és az S3-vödör közötti körkörös függőség problémája van egy egymástól függő címkeérték miatt. provider..

Miért érdemes elkezdeni a kódolást 2023-ban?
01100011 01101111 01100100 01100101 — beep boop beep boop Világunk folyamatosan fejlődik a technológia körül, és naponta fejlesztenek új technológiákat a valós problémák megoldására. Amint..

🎙 Random Noise #2  – Örökbefogadás és hit
az analitika íratlan világának gondozása Szeretné, hogy ezek a frissítések a postaládájába kerüljenek? Iratkozzon fel itt . "Ha önvezető autókat gyártanak, akkor mi miért ne..

A legrosszabb politika és prediktív modellek májátültetésre jelöltek számára az Egyesült Államokban
A máj (vagy óangolul lifer) az emberi test legnehezebb belső szervére utal, amely csendesen működik a nap 24 órájában. Mit csinál a máj? 500 feladatot hajt végre a szervezet egészségének..

5 webhely, amely 2022-ben fejleszti front-end fejlesztői készségeit
Frontendmentor.io A tényleges projektek létrehozásával a Frontendmentor.io segítséget nyújt a front-end kódolási képességeinek fejlesztésében. A kódolást azután kezdheti meg, hogy..

Mikor kell használni a Type-t az interfészhez képest a TypeScriptben?
A TypeScript a JavaScript gépelt szuperkészlete, amely statikus gépelést ad a nyelvhez. Ez megkönnyíti a robusztus és karbantartható kód írását azáltal, hogy a hibákat a fordítási időben..