Lecture overview -- Keyboard shortcut: 'u'  Previous page: Wait og notify -- Keyboard shortcut: 'p'  Next page: Eksempel på et program med synkronisering: Synkroniseret Sangkor -- Keyboard shortcut: 'n'  Lecture notes - all slides and notes together  slide -- Keyboard shortcut: 't'  Help page about these notes  Alphabetic index  Course home  Page 37 : 41
Forelæsningsnoter i Objekt-orienteret Programmering
Samtidighed i Java
Wait og Notify idioms

Der kan anvises nogle typiske mønstre og regler for anvendelse af wait og notify til synkronisering af samarbejdende tråde. Vi ser her nærmere på disse 'idioms'

Wait skal altid kaldes i en betingelses-afventende løkke

Notify skal altid kaldes når betingelsen kan være ændret

class MonitorClass {

  condition variable;

  synchronized void doWhenCondition(){
    while (!condition){
      wait();
    }
    // Betingelsen er opfyldt
    // Udfør handlinger som har afventet betingelsen
  }

  synchronized void changeCondition(){
    // Modificer en variabel, som indgår i betingelsen
    notifyAll();
  }
}

Typiske mønstre for anvendelse af wait of notify metoderne i en klasse, der virker som en monitor.

  • Metoden wait skal altid kaldes i en løkke, ikke blot betinget af en if

    • At blive vækket gennem notify er ikke ensbetydende med at wait's betingelse er opfyldt

  • Når et synkroniseret objekt skifter tilstand bør den altid kalde metoden notifyAll

    • Derved får ventende tråde chancen for at checke om der er sket det tilstandsskift, som muliggør en tråds genoptagelse