06. april 2004 - 22:42Der er
7 kommentarer og 1 løsning
Avanceret syncronize spørsmål
Jeg ønsker at skabe noget lidt speciel kode, jeg håber jeg kan forklare det.
Jeg ønsker to metoder
public void metode1() { synchronized(SyncRoot.sync1) { //kode //kode } }
Dvs metode 1 skal bare låse helt normalt, så at der aldrig kan uføres to metode1 samtidig.
Men så vil jeg også have en metode 2
publiv void metode2() { //kode //kode }
Jeg ønsker nu at metode2 også skal låse på SyncRoot.sync1, således at dens kode først bliver udført når alle metode1, er afsluttet, og at mens dens kode bliver udført, kan anden kode i metode1 ikke blive udført.
Men men
Hvis jeg bare skriver:
public void metode2() { synchronized(SyncRoot.sync1) { //kode //kode } }
Bliver metode2 jo også låse på sig selv, og det ønsker jeg ikke. Den skal kun være låst i forhold til metode1.
( Min SyncRoot klasse indeholde bare nogen objecter jeg kan bruge til at låse på. )
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
public synchronized void release() { nouser--; notifyAll(); }
}
public class DinKlasse { private static MultiSemaphore sem = new MultiSemaphor(); public void metode1() { sem.get(MultiSemaphore.EXCLUSIVE); ... sem.release(); } public void metode2() { sem.get(MultiSemaphore.SHARED); ... sem.release(); } }
Ja, men det virkede vist fint til formålet. Desværre løste det bare ikke mit konkrette problem (med en javaapplet som nogen gange får IE til at hænge).
Men jeg lærte en masse nyt om java.
Synes også måske at måden at gøre det på er lidt dårlig, fordi den har det med en tæller (nouser) som tæller op og ned. Hvis så en "klient" fryser eller lukker ned, bryder systemet jo sammen, ville nok forsøge selv at udvikle en løsning uden en tæller (men måske kan det slet ikke lade sig gøre).
Men nu er det lidt ligemeget, ide jeg har udskudt problemet lidt.
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.