Diskuze: Synchronized vs. Volatile
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 3 zpráv z 3.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.


Ahoj, víš, že v Javě moc nedělám, ale zkusím to
Problém se synchronizací vláken
evidentně chápeš, ale raději ho zopakuji. Představ si 2 metody:
getZustatekUctu()
vyberZUctu(int kolik)
A nyní si představ následující kód:
if (getZustatekUctu() >= 100)
vyberZUctu(100);
Tento kód budeš mít ve vláknu a to spustíš 2x. Problém je v tom, jak OS s vlákny pracuje. Procesor nic jako paralelní běh neumí, ve skutečnosti je to simulované OS a procesor jen mezi vlákny rychle přepíná (uspává je a probouzí), nám se poté zdá, že běží současně. Přepínání provádí OS na základě priorit, vytížení a podobně. Nikdy tedy nevíme, kdy naše vlákno uspí a kdy ho opět probudí.
Představ si, že běží tedy 2 vklákna. Na účtu je 150 Kč. První vlákno provede podmínku, ta platí a poté se OS rozhodne vlákno uspat (to se může jednoduše stát). Nastupuje druhé vlákno, to provede podmínku, ta platí a vybere 100 Kč. Na účtu zbude 50 Kč. Vlákno skončí a probouzí se první vlákno. To pokračuje kde přestalo a vybere 100 Kč. Na účtu je -50 Kč, právě jsme dospěli do nekonzistentního stavu. Přitom jsou podmínky v pořádku.
Problém je samozřejmě v tom, že operace kontroly stavu a výběru neproběhly bezprostředně zasebou. Proto volání metod uzavřeme do bloku synchronized. Hovoříme o zamknutí (Lock), operace se budou provádět bezprostředně po sobě.
Pořadí metod není jediným problémem vláken. Ony jsou vlastně dva, náš program může rozbít ještě cachovaná paměť. Když vlákno běží na jádru procesoru, nemá k dispozici tu samou paměť, jako vlákno v jiném jádru. Používá cachovanou hodnotu. Asi si dokážeš představit, že může dojít k podobnému problému, jako s pořadím metod. Použijeme starou hodnotu, která již neplatí.
Nastupuje volatile. Volatile podporuje i primitivní typy (viz. http://www.itnetwork.cz/index.php?… ). Používá se tam, kde je třeba synchronizovat jednu proměnnou v paměti mezi více vlákny. Nedochází k cachování její hodnoty a synchronizace hodnoty proběhne vždy při čtení nebo zápisu. Každé vlákno pracuje se stejnou hodnotou.
Pro rekapitulaci:
Synchronized synchronizuje několik metod do jedné atomické operace a
synchronizace nastává tam, kde se ji vynutíme.
Volatile synchronizuje hodnotu proměnné samo ve chvíli čtení a zápisu.
Nicméně metody sesynchronizovat nedokázalo. Od novější Javy toho umí
volatile více, nechci zde psát něco, co není přesné, ale myslím, že jsem
alespoň nastínil, kde je rozdíl. Volatile je sdílená proměnná mezi
vlákny, synchronized atomický soubor operací. Za nepřesnosti se omlouvám

Díky moc
Nepřesnosti mi
nevadí já potřeboval aspoň nastínit na co to je to volatile 
Zobrazeno 3 zpráv z 3.