28. juni 2008 - 16:53Der er
8 kommentarer og 1 løsning
lock'e en class-variable
Hi,
jeg har foelgende test-class: +++ package test;
class Test {
private String value;
public synchronized set( String value ) { this.value = value; }
public String get() { return this.value; }
} +++
Med synchronized kan jeg lock'e set-methoden. Men det er staedigvaek muligt at bruge get-methoden i en thread og set-methoden i en anden - paa samme tid.
Hvordan kan jeg lock'e private String value for hele programmet, hvis jeg kaller set-methoden. Saadan, at et get-call venter til set-methoden er faerdig?
hvis der er flere threads som kaller get-methoden, saa maa de jo gerne faa fat i informationerne paa samme tid uden at blockere hinanden (vente paa hinanden). get-methoden skal altsaa kun vente paa at faa fat i vaerdierne, hvis set-methoden er igang med at blive udfoert.
desuden har jeg faaet sagt, at hvis jeg setter to methoder synchronized, og begge methoder bliver kaldet paa samme tid, saa venter de ikke paa hinanden, pga. at det er to forskellige "monitor". passer det ikke?
>Ah. Du vil have en 1 write eller multi read lock ? ja.
det skal vaere muligt at udfoere read-methoderne paa samme tid fra forskellige threads. Men, der maa ikke vaere mulighed for at udfoere en read- og write-methode paa samme tid.
>Nej. To metoder der begge er synchronized venter på hinanden da de begge synkronisere >på objektet selv. Ah, ok. Mange tak!
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.