F8 (Synkronisering) Flashcards
Vad är callback?
En metod som skickas som parameter till en annan metod, den andra metoden ska köra callback-metoden när en händelse inträffar
Vad är skillnaden synkron och asynkron callback?
synkront callback - kan göra en sak i taget
asynkront callback - kan göra flera saker samtidigt
Vad innebär synchronous?
att en uppgift ska bli färdig innan nästa task kan börja, programmet eller tråden fortsätter inte tills ett svar kommit från händelsen
Vad innebär asynchronous?
varje task görs av en ny tråd, tråden ska anropa en callback-metod (funkar som listeners)
Varför är synkronisering viktigt?
För att om flera trådar använder samma resurs (t ex läser data och ändrar den samtidigt pga olika trådar/parallella processer) kan det ge oväntade fel eller krascha programmet
Vad säkerställer synkronisering?
att flera trådar kan använda samma kod utan felaktiga resultat genom att
synkronisera sekvenser av tråd
Vad kan man säga att koden blir vid synkronisering?
trådsäker kod
Vad innebär det att alla objekt i java har ett lås?
att om en tråd börjar exekvera en synchronized-metod så blir alla synkroniserade miljöer i objektet låsta för andra trådar, de får vänta på tillträde till den “första” tråden är klar
Vad är en synchronized-sats?
ett sätt att synkronisera kodsekvens (block) inuti en metod
Hur skrivs en synchronized-sats?
genom att ange en objektreferens såhär:
public void method() { : synchronized( objektreferenss){ //skyddad kod } : }
Är klasser som implementerar Collection / Map i regel synkroniserade?
Nej
Hur kan man synkronisera klasser som implementerar Collection/Map?
- låta en instans av klassen vara attribut i en ny klass
2. skriva synkroniserade metoder vilka använder instansen
Vad är en kö i kod-sammanhang?
En datastruktur som är som en lista men
- man kan bara lägga till objekt i slutet
- ta ut objekt i början
Vad innebär producer-consumer modellen?
- Producer-trådar LEVERERAR element och sparar i buffert
- Consumer-trådar HÄMTAR (avlägsnar)
- Producer och Consumer ska INTE vara i buffert samtidigt
- Producer ska INTE lägga till om buffert är full
- Consumer ska INTE hämta om buffert är tom
- Kan finnas fler av varje typ
Hur kan man lösa problemet att producer inte ska fylla en buffert och consumer inte hämta från tom buffert?
Genom en samling av typ LinkedList