Avatar billede javanewbie Nybegynder
10. december 2003 - 15:57 Der er 15 kommentarer og
3 løsninger

Synchronized på jævnt dansk

Nogen der vil være så venlige at forklare synchronized for mig på jævnt dansk?

Gælder synchronized på tværs af alle synchronized metoder, så der på ethvert givet tidspunkt kun er EN af dem der kan køre?
Avatar billede soreno Praktikant
10. december 2003 - 16:01 #1
Tænk i tråde.

Kun én tråd ad gangen kan være i en synchronized metode (eller blok).
Avatar billede arne_v Ekspert
10. december 2003 - 16:03 #2
public synchronized void f() {
  ...
}

er det samme som:

public void f() {
  synchronized (this) {
      ...
  }
}

d.v.s. at den synkroniserer på objektet selv.

Flere synchronized metoder i samme klasse vil derfor udelukke hinanden.

[hvis det er en static metode synkroniserer den på klassen]
Avatar billede javanewbie Nybegynder
10. december 2003 - 16:03 #3
Ok. Hvad så hvis jeg laver en servlet? (eller jsp for den sags skyld)

Hvis der sker flere samtidige kald til den pågældende servlet, vil der kun være en af dem der kan tilgå en synchronized metode?
Avatar billede arne_v Ekspert
10. december 2003 - 16:03 #4
Og som søren siger: det er kun relevant i multithreaded sammenhæng.
Avatar billede dsj Nybegynder
10. december 2003 - 16:05 #5
I nedenstående eksempel kan metode1 og metode2 ikke køres samtidig - metode1 kan godt kaldes, men vil blokkere i synchronized(obj) til obj.getClass() er udført i metode2 og omvendt.

Object obj = new Object();

public void metode1() {
  synchronized(obj) {
    ...
  }
}

public void metode2() {
  obj.getClass();
}
Avatar billede arne_v Ekspert
10. december 2003 - 16:05 #6
Ja.
Avatar billede arne_v Ekspert
10. december 2003 - 16:06 #7
Alle requests til en servlet bruger samme instans medmindre den implementerer
SingleThreadModel.
Avatar billede javanewbie Nybegynder
10. december 2003 - 16:07 #8
Takker for svar. Soreno og dsj må også gerne lige smide svar. Så sætter jeg lidt flere point af til deling.
Avatar billede arne_v Ekspert
10. december 2003 - 16:08 #9
dsj>

Er getClass en synkroniseret metode ?
Avatar billede jakoba Nybegynder
10. december 2003 - 16:08 #10
synkroniseret, er et godt dansk ord.
Din lynlås er synkroniseret så hakkerne passer sammen hele vejen op.

hver sunkroniseret metode i java er sit eget synkroniseringspunkt, uafhængigt af evt andre synkroniserede metoder. så hvis du har

syncronized void a() {
    //kode
}

syncronized void b() {
    //kode
}

kan tråd_1 være aktiv i metode a mens tråd_2 venter på at komme ind i a
samtidig med at tråd_3 er aktiv i metode b mens tråd_4 venter på at komme ind i b
osv.

mvh JakobA
Avatar billede jakoba Nybegynder
10. december 2003 - 16:10 #11
Ups. det jeg siger strider mod det arne_v siger. Jeg vil anbefale dig at tro på ham.
Avatar billede javanewbie Nybegynder
10. december 2003 - 16:11 #12
jakoba >> Aaahhaaaaaa!!! Se det var en lidt anden tolkning end det jeg fik længere oppe.

Smid også lige et svar...
Avatar billede javanewbie Nybegynder
10. december 2003 - 16:11 #13
Øh. Ok. :-)
Avatar billede arne_v Ekspert
10. december 2003 - 16:16 #14
Avatar billede soreno Praktikant
10. december 2003 - 16:16 #15
Svar etSvar = new Svar();
Avatar billede dsj Nybegynder
10. december 2003 - 16:31 #16
Nej, getClass() er ikke en synkroniseret metode, men hvis der synkroniseres på objektet, blokkeres alle kald til det.
Avatar billede dsj Nybegynder
10. december 2003 - 16:38 #17
Hmmm - det jeg skrev er forkert :(
Avatar billede dsj Nybegynder
10. december 2003 - 16:39 #18
Den vil kun blokkere, hvis getClass() også er synkroniseret...
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