Avatar billede kernelx Juniormester
21. januar 2010 - 06:53 Der er 6 kommentarer og
1 løsning

synchronized-monitor på et ikke final object

Hi,

jeg arbejder for det meste med netbeans.
hvis jeg i netbeans prøver følgende:

public class Test {
  private TestClass2 syncTry;
  public void testMethod() {
    synchronized(syncTry){
      // code
    }
  }
}

i netbeans melder "synchronized(syncTry)" at syncTry ikke er final.
Er det sådan, at man skal prøve - kun at arbejde med singletons eller lignene, hvis man bruger synchronized?

mange tak allerede i forvejen!
Avatar billede arne_v Ekspert
21. januar 2010 - 15:31 #1
Jeg har altsaa en grim mistanke om at problemet ligger i noget af den kode du ikke viser. Ovenstaaende burde virke.
Avatar billede kernelx Juniormester
22. januar 2010 - 16:28 #2
har du netbeans?
prøv at kopere eksemplet - og lav en dummy-class som hedder TestClass2
Avatar billede arne_v Ekspert
22. januar 2010 - 16:38 #3
Ikke her paa arbejde.

Men jeg har en DOS prompt:

C:\>type TestClass2.java
public class TestClass2 {
}

C:\>type Test.java
public class Test {
  private TestClass2 syncTry;
  public void testMethod() {
    synchronized(syncTry){
      // code
    }
  }
}

C:\>javac Test.java TestClass2.java

C:\>
Avatar billede kernelx Juniormester
22. januar 2010 - 16:55 #4
netbeans melder INGEN fejl!
den giver bare en info:
"Synchronization on non-final field"

coden virker uden problemer. Men pga. at netbeans viser denne message,
er mit spørgsmål, om det er uklogt at bruge synchronized på en property
som ikke er final?
Avatar billede arne_v Ekspert
22. januar 2010 - 17:06 #5
Ah, saa er jeg med.

Den informative besked giver lidt mening.

syncobj = new Object();
synchronized(syncobj) {
    ...
}

er ikke en snus thread safe, fordi forskellige traade vil synkronisere paa forskellige objekter d.v.s. de vil slet ikke synkronisere med hinanden.

Hvis man altid bruger:

private final Object syncobj = new Object();

saa faar man en fejl hvis en traad forsoeger at saette til et andet objekt.

Fin informativ besked.

Og formentlig boer du saette den til final.
Avatar billede kernelx Juniormester
26. januar 2010 - 17:56 #6
mange tak!
husk at skrive et eller andet som svar.
Avatar billede arne_v Ekspert
26. januar 2010 - 18:40 #7
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester