A kérdésekre adott válaszok az interjút level27
A kérdésekre adott válaszok az interjút Level27
1. Mi az a holtpont?
Holtpont - olyan helyzet, amelyben két vagy több szál van tiltva vár egymást. Dedlock is nevezik holtpont.
Holtpont - olyan helyzet, amelyben két vagy több folyamat vesz bizonyos forrásokat, megpróbál más források által tartott más folyamatok, és nem folyamat nem tud a szükséges forrásokat, és ennek megfelelően hagyják.
Van reteszeli sync érdekében (sorrendben megoldandó cél);
Egymáshoz objektumok között (különböző tárgyakat próbál hozzáférni az azonos szinkronizált blokkok);
Resource holtpont (amikor megpróbál hozzáférni egyes források, hogy lehet használni, ugyanakkor csak egy szál).
5 várakozás módszer használata ajánlott, ha vagy amíg a konstrukciókat?
Itt a válasz egyszerűen idézet az oldalról: www.skipy.ru/technics/synchronization.html
Körülbelül hívja a várakozást. Már most világos a kisülési berendezés. Javasolt, hogy hívja várni belül a while ciklus. Ie nem írok
Miért van szükség. A tény az, hogy az ok értesíteni senkit. Csak tévedésből, ahonnan senki sem immunis. Ebben az esetben a tapasztalat, amit beszélt korábban, vette fel a rendetlenség van annak érdekében, hogy elkerülje ezt a lehetőséget. Csak a rejtett tárgy, amelyen szinkronizáció történik. És hozzáférést biztosít neki csak a kódot. Ez jó gyakorlat, de ez nem mindig lehetséges, sajnos. Tehát, ha a menet vár bizonyos feltételek - míg egy variáns megbízhatóbb. Ha az áramlás által elismert hiba - ismét ellenőrzi a feltételt, és ha szükséges, meg kell várni a további.
Ezen kívül lehetőség van, és egy egyszerű kilépés készenléti nélkül értesíti a hívást. Őszintén bevallom, hogy én még nem láttam ezt a virtuális gép specifikációja, bár kifejezetten keresi. De néhány „guruk” azt állítják, hogy a VM kilábalni spontán elvárásainak. Továbbá azt is megfigyeltük, periodikusan. Ha valaki ad egy linket a megfelelő specifikáció - hálás vagyok!
6. Mi történik a hívás után notifyAll módszer?
A java.lang.Object.notifyAll () felébred minden szál, hogy várják erre a tárgyra monitorán. Egy szál vár egy objektum monitor hívja egyik várakozás módszereket.
Felébreszti a szálak várnak ezen a monitoron.
Miután példányosítása ImmutablePoint annak módosítása nem lehetséges.
A legegyszerűbb példa megváltoztathatatlan osztálya JDK karakterlánc. Bármilyen módszert, hogy hívja a sorban (pl description.toLowerCase ()) visszatér az új húr, és nem módosítja az eredeti.
Példa változékony osztályt a JDK - Date. Például myDate.setHours (x) módosítja magát például myDate!
Abban az esetben, többszálú programozás előnyeit megváltoztathatatlan osztályok nyilvánvalóak: létrehozása után objektumokat lehet átadni más szálak, és akkor mindig naprakész. Ie akkor nem kell ellenőrizni, hogy a dátum nem egy példány a feltétel, és hogy a másik szál módosított, miközben Ön dolgozik vele. Például, ha van egy módszer számla (Date endDate), itt van naiv való megfelelés ellenőrzése endDate néhány előfeltétele, és elkezdenek dolgozni vele. Ezen a ponton, a másik szál változhat endDate például telepíteni mélyen a múltban. A következmények lehetnek a legcsodálatosabb.
8. Mi az a «thread-safe»?
ismét:
stackoverflow.com/questions/6324085/
Szál biztonságos azt jelenti, hogy a módszer vagy osztály például fel lehet használni a több szálat egyidejűleg minden gond nélkül előforduló.
Áramlási állambiztonsági azt jelenti, hogy a módszer vagy osztály lehet használni több szál nélkül problémái adódnak, vagyis holtpontok.
Tekintsük a következő módszerrel:
Most menet egy és cérna B egyaránt szeretnék végrehajtani AddOne (). de indul az első és beolvassa az értéke SajatInt (0) a tmp könyvtárba. Most valamiért az ütemező dönti el, hogy megállítsák menet A és elhalasztja végrehajtás a témához B. Menet B most is így szól az értéke SajatInt (még 0) bele saját változó tmp. Menet B befejezi az egész eljárás, így a végén SajatInt = 1 és 1 vissza. Most már téma egy köre újra. Menet Egy folytatódik. És hozzáteszi 1 tmp (tmp 0 a menet A). És menti ezt az értéket SajatInt. SajatInt ismét 1.
Itt és a menet az A és B szál kíván végrehajtani AddOne (). Az első, de kezd SajatInt és beolvassa az értéket (0) a TMP. Most, valamilyen oknál fogva, az ütemező úgy dönt, hogy hagyja abba az áramlás egy, és tegye a menet B. Az áramlás most is szól SajatInt (0) értéket a saját változó TMP. Menet B befejezi a teljes módszert, hogy a végén SajatInt = 1 és 1 vissza. A folyamat végrehajtása. Hozzáad 1 TMP (TMP 0 menet A). És akkor tárolja ezt az értéket SajatInt. SajatInt 1 újra.
Tehát ebben az esetben az eljárás AddOne nevezték két alkalommal, hanem azért, mert az eljárás nem hajtotta végre egy szál biztonságos módon értéke SajatInt nem 2, mint az várható volt, de 1, mert a második szál olvasni a változó SajatInt mielőtt az első menet kész frissítéséről.
Tehát ebben az esetben AddOne módszert hívták kétszer, de mivel ez a módszer még nem hajtották végre a patak biztonságos módon érték SajatInt nem 2, mint az várható volt, és 1, mert a második menet olvasás változó SajatInt véget ért, mielőtt az első szál frissíteni.
Létrehozása menet biztonságos módszerek nagyon nehéz a nem triviális esetekben. És van jó néhány technikát. A Java tudsz jelölni eljárás szinkronizált, ez azt jelenti, hogy csak egy szál képes végrehajtani ezt a módszert egy adott időpontban. A másik szál sorban. Ez teszi a módszer thread safe, de ha van egy csomó tennivaló eljárásban, akkor ez pazarol sok időt. Egy másik módszer az, hogy „jelölés csak egy kis része egy eljárás, szinkronizált” létrehozásával zár vagy szemafor, és zár ez a kis része (általában a kritikus szakasz). Van még néhány módszer, hogy végrehajtsák a lockless thread safe, ami azt jelenti, hogy ők építették, oly módon, hogy több szálat is versenyezhet rajtuk keresztül egyidejűleg anélkül, hogy valaha problémákat okoz, ez lehet a helyzet, ha a módszer csak végrehajt egy atomi hívást. Atomic hívások azok a hívások, amelyeket nem lehet szakítani, és csak akkor lehet megvalósítani egy szál által egy időben.
Létrehozása egy szál - biztonságos módszerek nagyon nehéz. A Java, akkor megjelölhet eljárás szinkronizált, ez azt jelentené, hogy csak egy szál képes végrehajtani ezt a módszert az adott pillanatban. Más szálak várakozni. Ez teszi a menet biztonságos módszert, de ha sok a tennivaló a módszer, akkor hosszú időt vesz igénybe. Egy másik módszer abban áll, jelölés csak egy kis része a módszer, mint szinkronizálva „létrehozásával zárak (zárak) vagy szemafor, és zár a kis részét (általában az úgynevezett kritikus szakasz (kritikus szakasz)). Van még néhány módszer, hogy végrehajtsák a lockless szálbiztosak (lockless thread safe), az azt jelenti, hogy úgy tervezték, hogy több szálon át tudnak haladni, egyszerre soha nem okoz problémát, lehet, hogy az esetben, ha az eljárást végrehajt egyetlen atomi hívást. Atomic hívások azok a hívások, amelyeket nem lehet megszakítani, és meg lehet valósítani csak egy szál.
ru.wikipedia.org/wiki/.0%9C.0%BE.0%B4.0%B5.0%BB.1%8C_.0%BF.0%B0.0%BC.1%8F.1 % 82,0% B8_Java
Különösen egy lefut, mielőtt a másik az ilyen ügyletek (a lista nem teljes):
• Szinkronizálás és monitorok:
• Monitor Capture (korai szinkronizált, zár módszer), és minden utána ugyanazon a szálon.
• vissza a monitor (a végén a szinkronizált, az eljárás kinyit), és minden, ami előtte ugyanazon a szálon.
• Így az optimalizáló beléphet egy sorban szinkron blokk, de nem kifelé.
• Visszatérés a monitor és a későbbi elfogása egy másik szál.
• Írás és olvasás:
• Bármely adatfüggőségek (azaz, bármely bejegyzés a változó és az azt követő olvasás azonos) egyetlen áramban.
• Minden, ami ugyanazon a szálon írás előtt az illékony változó, és a felvétel is.
• illékony-olvasni, és minden utána ugyanazon a szálon.
• felvétel egy illékony-változót, majd azt olvasva. [4] [2] Így felejtő memória rekord ugyanazt, hogy a visszatérés a monitor, és az olvasás - ugyanaz, mint a rögzítés [5]. Ez azt jelenti, hogy ha az egyik szál van rögzítve illékony változó, és a második megtalálható minden, ami megelőzi a felvétel előtt elvégzett minden, ami után az olvasó; cm. illusztráció.
• Az objektum változók (pl illékony List x), így egy erős garancia végeznek egy objektum referencia, de nem annak tartalmát.
• Karbantartás:
• Statikus inicializálás és minden olyan tevékenység bármely objektum példány.
• A felvétel az utolsó mező a kivitelező [6], és minden után a kivitelező. Ez alól kivételt jelent az általános tranzitív, akkor előfordul, mielőtt kapcsolatban nem tranzitív kapcsolódik más szabályokkal, és ezért okozhat inter-szál versenyt. [7]
• Minden munkát a tárgy és véglegesítése ().
• Flow Szolgáltatás:
• Flow Run bármilyen kódot a falon.
• A elmosódása kapcsolatos változók az áramlás, és bármilyen kódot a falon.
• a stream és csatlakozz (); stream és isAlive () == false.
• megszakítás () és az áramlás megáll felderítése tény.
Szabály 1-es szám: egyszálú programok végrehajtása psevdoposledovatelno. Ez azt jelenti, hogy a valóságban a processzor végezhet több művelet órajelenként, ugyanakkor változik a sorrendben, de az összes adat függőségek, hogy a viselkedése nem különbözik a soros.
Szabály 2. számú: sehol, aki értékeket. Reading egy változó (kivéve a nem illékony hosszú és dupla, akik számára ez a szabály nem hajtható végre) ad egy alapértelmezett értéket (nulla), vagy valami írva, hogy a másik csapat.
És az első számú szabály 3: A többi esemény végre annak érdekében, hogy hasonló szigorú parciális rendezést „lefut, mielőtt” (angol előtt történik.).
3. Lehet holtpont fordulhat elő módszerek várni bejelentik?
A válasz: igen, tudnak. Hagyományosan az „első” menet várhat, amíg eláll az állapotban „második” menet, ami viszont vár, amíg eláll az állam az első menet vár: vár egymást, és semmi nem kell feltalálni. A probléma az étkezési filozófusok által javasolt Edgar Dijkstra - éppen a lényeg a világítás probléma eredetét a biztosítóberendezés keretében használatának várakozás / értesítik Ez egy nagyon jól megírt, és rendelkezésre áll a „filozófia a Java» Eckel: 17. fejezet, szakasz 1.17.3
Ennek fő oka a hívást vár, és értesíti a statikus egység vagy módszer, amely a Java API feltétlenül szüksége van rá. Ha hívják őket nem a szinkronizált blokk, a kód fog dobni IllegalMonitorStateException. Több ravasz oka az, hogy elkerüljék a verseny feltétele a hívások között, várjon, és értesíti.
Holtpont - olyan helyzet, amelyben két vagy több szál van tiltva vár egymást. Dedlock is nevezik holtpont. Ha megfelelően kidolgozott javaslatot. Inkább azt írta, hogy a patthelyzet - ez összefonódó szálak. Ez egy olyan helyzet, amelyben két vagy több szál van blokkoló egymás munkáját (vagy vár egymással, hogy folytassák a munkát).
További nyolc rendbeli válaszolni néhány gyűrött és rosszul célzott. Menet nem feltétlenül jelenti azt, hogy nincs a holtpont (és valószínűleg még az ellenkezője). Ugyanakkor SCIP írt a következő: az objektum thread-safe, ha olyan módszereket az objektum lehet nevezni a szálak nem érinti az állapotát.
7. Milyen előnyökkel jár az átvevő a tárgy, ha ez megváltoztathatatlan?
Egy példa egy kicsit hibás. Class ImmutablePoint meg ez a felismerés kell, hogy a végső (végleges) annak érdekében, hogy elkerülje a botladozó egy „változó” örökös. Ez a pont írja le Hatékony Java 2nd Edition 15. cikk.